此处指的是用于登录状态的保持,服务器端生成token与cookie的区别。
tooken的使用
token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码
axios.interceptors.request.use((config, promise) => {
// 每次请求时候带token,相当于是身份的标志,用于客户端与服务端通信时
config.headers['Content-Type'] = 'application/json'
config.headers['Authorization'] = localStorage.getItem('token')
})
cookie的使用
用户登录成功后,会在服务器存一个session,同时发送给客户端一个cookie,数据需要客户端和服务器同时存储,用户进行操作时,需要带上cookie,在服务器进行验证
1. axios传cookie
axios.defaults.withCredentials = true;
2. fetch传cookie
credentials: "include"
//java后端
response.setHeader("Access-Control-Allow-Origin", "http://www.domain1.com");
response.setHeader("Access-Control-Allow-Credentials", "true");
token与cookie区别
1、cookie
cookie是有状态的,需要客户端和服务器同时存储
2、token
token是无状态的,存储在客户端(localStorage或者cookie)
token可以避免 CSRF 攻击(跨站点请求伪造)
token支持跨域
token失效
一旦 token 过期,就反馈给前端,前端使用 refresh token 申请一个全新 token 继续使用。这种方案中,服务端只需要在客户端请求更新 token的时候对 refresh token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。