1. 引入:
HTTP是无状态协议,无法记得上一次连接的信息,比如记不得用户是否已经登陆等信息。
而Session、Cookie、Token便是对HTTP无状态的一种补充;
2.Cookie:
Cookie是浏览器对于一些信息的键值对形式保存,当浏览器关闭,Cookie也就删除了;
3. Session:
Session是服务器中保存的对象(Tomcat保存在ConcurrentHashMap<Session>中),生成之后在返回Http response时,会发送sesionId给浏览器(响应头里会有Set-Cookie:JSESSIONID=XXXXXXX ),浏览器收到response后会在Cookie里保存session id。之后浏览器发送请求时,便可以通过Cookie中的sessionId找到响应的用户。
也就是说,Cookie和Session组合使用(会员Cookie)实现网站对于用户的身份认证。
4. Token(Json Web Token 的简称就是 JWT,通常可以称为 Json 令牌,实现网站对于用户的身份认证。)
Token可以解决会员Cookie方式存在的当浏览器请求另一台服务器时找不到Session的问题(因为Cookie保存在上一台服务器上)。
Token采用通过一个只有服务器知道的密钥和相应的密钥算法(比如SHA256)对信息加密,生成一个secret,然后和header(指定了加密算法)和payload(一些信息,包括用户信息)组成token;
之后浏览器请求服务器时,服务器通过指定的算法和保存的密钥计算secret,若secret和token中的signature相同,则认证成功,因此成功地记录了用户的登录状态。由于不存在需要在浏览器中保存session相似的操作,因此解决了session在不同服务器间不可见的问题(时间换空间);
5.相同:
都是为了解决HTTP协议无状态的问题
6.不同
token解决了会员cookie在不同服务器之间不可见的问题;
cookie与session的区别
1、cookie数据存放在客户端上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中
session与token的却别
1、SSESION:我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。
2、TOKEN :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。