1、因为cookie采取同源策略,只有相同域名的网页才能获取域名对应的cookie,而别人在其他域名无法获取你的cookie,也就无法获取你的token,所以当别人伪造请求时,token和cookie中的token是绝对不一致的;
cookie和session
相同:都是用来跟踪浏览器用户身份的会话方式;
区别:
保持状态:cookie保存在浏览器端,session保存在服务端;
使用方式:cookie, 如果不设置过期时间,cookie保存在内存中,生命周期随浏览器的关闭而结束,如果设置了过期时间,cookie保存在硬盘中,关闭浏览器,cookie数据直到过期时间而消失;cookie是服务器发给客户端的特殊信息,cookie是以文本的形式保存在客户端,每次请求都会带上它;session:当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid,如果有sessionId,服务端将根据id返回对应的session对象,如果没有sessionId,服务器端会创建新的session对象,并把sessionId在本次响应中返回客户端,通常使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器,如果用户禁用cookie,则使用URL重写;可以通过response.encodeURL(url)进行实现,API对encodeURL的约束为,当浏览器支持cookie时,url不做任何处理,不支持cookie时,将会重写url将sessionid拼接到访问地址后面;

存储内容:cookie只能存储字符串类型,session能存储任何类型的对象;

存储大小:单个cookie保存的数据不能超过4kb, session大小没有限制;

安全性:session的安全性大于cookie

使用场景:cookie: 判断用户是否登录过网站,保存用户上次登录的时间,上次查看的页面,浏览计数;session:用户保存每个用户的专用信息,变量的值保存在服务端,通过sessionId来区别不同的用户;商城购物车,保存用户登录状态,将某些数据放在session中,供同一用户的不同页面使用;

缺点:cookie:1,大小受限,用户禁用cookie,就会使其功能受限,3,安全性低,4,每次访问都要发送cookie,浪费带宽;session:保存的东西越多,就越占服务器内存。依赖于cookie(sessionid保存在cookie),如果禁用cookie,则要使用url重写
<------------------------------------------------------------------------------------------------------------------->
ps:URL Rewrite即URL重写,就是把传入Web的请求重定向到其他URL的过程。URL Rewrite最常见的应用是URL伪静态化,是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.asp?id=123 使用UrlRewrite转换后可以显示为http://www.123.com/news/123.html
<------------------------------------------------------------------------------------------------------------------->
ocalStorage和sessionStorage:

生命周期:localStorage的生命周期是永久的,关闭页面也不会消失,除非是主动删除;sessionStorage的生命周期是仅在当前会话下有效‘

存储大小:localStorage和sessionStorage的存储数据一般都是5mb;

存储内容类型:都只能存储字符串类型;

获取方式:localStorage: window.localStorage; sessionStorage: window.sessionStorage;

应用场景:localStorage常用于长期登录,适合长期保存在本地的数据;sessionStorage适合敏感账号一次性登录;
<------------------------------------------------------------------------------------------------------------------->
token: 也被称作令牌,是由uid(用户身份标识)+time(时间戳)+sign(签名)+ 可选的固定参数,组成;
<------------------------------------------------------------------------------------------------------------------->
token只能被保存在客户端的cookie或localstorage中,因为用户的状态在服务端的内存中是不能存储的,所以这是一种无状态的认证机制;
<------------------------------------------------------------------------------------------------------------------->
token认证流程:1,用户登录校验,校验成功后就返回Token给客户端,2,客户端收到数据后就保存在客户端,3,客户端每次访问api就携带Token到服务端 ,4,服务端采用filter过滤器校验,校验成功后返回请求数据,校验失败则返回校验码;
<------------------------------------------------------------------------------------------------------------------->

重点:

为什么将token放在cookie中,因为:cookie, 如果不设置过期时间,cookie保存在内存中,生命周期随浏览器的关闭而结束,如果设置了过期时间,cookie保存在硬盘中,关闭浏览器,cookie数据直到过期时间而消失;cookie是服务器发给客户端的特殊信息,cookie是以文本的形式保存在客户端,每次请求都会带上它(cookie会存储起来,并不是每次登录都会重新生成一个、会重新调用存储的)

Logo

前往低代码交流专区

更多推荐