一、Cookie
- 存储在浏览器。
产生过程:当浏览器第一次访问服务端时,服务端会记录身份信息,格式为key=value,放入Set-Cookie字段中,随响应报文一并发给浏览器,浏览器接收并保持这个身份标识。下次请求会自动将key=value字段发给服务端。
缺点:cookie不安全(敏感数据需要加密,通过SSL),只能保存少量数据,同时浏览器存储的cookie数量也有限制。
优点:
可以控制cookie的生命期
分担了服务器存储的压力
二、Session(会话控制):
- 存储在服务端的内存中
产生过程:(某服务端程序(如Servlet)调用**HttpServletRequest.getSession(true)**这样的语句时才会被创建)当浏览器第一次请求服务端时,服务端自动创建一个Session对象并附带一个Session_ID与之对应,id值会返回到浏览器,之后的请求中,Cookie会携带这个id来识别id。当会话过期或放弃后,服务端将终止会话。
三、token
由服务端生成的一段字符串,作为客户端进行请求的令牌,在第一次登录时服务端产生。token不存储数据,只是作为一个key,与之相关的数据还是存储在服务器上。
- 存放在客户端(浏览器)
- 存储在LocalStorage中,每次调用接口都把它当成一个字段传给后台
- 存储在cookie中,自动发送,缺点不能进行跨域
四、token与Cookie的区别
Cookie不允许跨域,token支持跨域,前提传输的用户信息是HTTP头传输的
相对优势:
1、无状态化,服务端无需存储token,只需要验证token数据,而session需要存储在服务端,通过cookie的sessionid查找对应的session。
2、避免CSRF跨站伪造攻击。
五、Cookie和Session的区别:
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择(url方案)。
什么是跨域
1.当一个请求url的**协议、域名、端口**三者之间任意一个与当前页面url不同即为跨域。
六、Session与Token的区别
身份认证方面,token比session更安全。