cookie在移动端兼容性不好,跨域也存在问题
session的使用
session存在于服务端内存,需要前端的cookie,也就是session-id配合获取信息
1. session的生成
session由后端生成,并会设置响应头Set-Cookie发送到浏览器或者其他客户端的一些信息,一般用于登陆成功的情况下返回给客户端的凭证信息,然后下次请求时会带上这个cookie,这样就能完成鉴权
2. 如何判断session有效期
1.后端可以设置session有效期,当然也能设置cookie的
token的使用
token是用于鉴权的标识符
1. token的生成
token由后端生成
2. 如何判断token有效期
1.如果存在cookie,可以设置cookie有效期,让cookie过期
2.如果是localStorage,交给后端判断
对比
token往往更有优势,session在移动端兼容性不好,跨域也存在问题。
例如,微信小程序就没有cookie,那它怎么可能会依据响应头来设置呢?
例如,我们请求https://www.google.com/时,浏览器会自动把google.com的Cookie带过去给google的服务器,而不会把https://www.baidu.com/的Cookie带过去给google的服务器。
这就意味着,由于域名不同,用户向系统A登录后,系统A返回给浏览器的Cookie,用户再请求系统B的时候不会将系统A的Cookie带过去。
针对Cookie存在跨域问题,有几种解决方案:
服务端将Cookie写到客户端后,客户端对Cookie进行解析,将Token解析出来,此后请求都把这个Token带上就行了
后端配置CORS时允许其跨域域名携带cookie
将token保存在SessionStroage中,不依赖Cookie就没有跨域的问题了。