token和session和cookie的区别
admin
2023-06-06 02:08:04

Token顾名思义就是令牌、凭证、钥匙。只有这把钥匙,你才能打开门。token一般都是服务端生成,比如一个web系统,用户登录的时候,服务端校验用户名密码通过以后,会生成一个token,同时会生成refreshToken和一个过期时间。然后将refreshToken和token返回给客户端。客户端会将token保存下来。后续所有的请求都会携带这个token。服务端会判断当前token是否存在已经是否过期。如果token不存在或者过期就会拒绝本次请求。如果token过期怎么办,就用refreshToken刷新时间。当然这里可能还有别的方案。比如只生成token,每次请求的时候都刷新过期时间。如果长时间没有刷新过期时间,那token就会过期。


session就是回话,这是服务端的一种操作。当你第一次访问一个web网站的时候,服务端会生成一个session,并有一个sessionid和他对应。这个session是存储到内存中的,你可以向这个session中写入信息,比如当前登录用户的信息。sessionid会被返回到客户端,客户端一般采用COOKIE来保存。当然这个COOKIE不用人为写入。用tomcat容器来举个例子。当后端调用HttpServletRequest对象的getSession的方法的时候,tomcat内部会生成一个jsessonid(tomcat sessionid的叫法)。这个jsessonid会随本次请求返回给客户端。响应头信息

HTTP/1.1 200 OK
Set-COOKIE: JSESSIOnID=xxxxxxxxxxxxxxxxxxx

这个jessionid就会写到COOKIE中。之后jessionid就会通过COOKIE传递到服务端。

token和session和cookie的区别图1

token和session和cookie的区别图2

这里我们就会很清楚了,session的数据是存储到内存中。那问题就来了,如果我们的服务是分布式部署,有多台机器的话,可能我们第一次登陆的时候,我们把用户的信息存储到了session,但是后面的请求到了B机器上,那B机器是获取不到用户的session的。另外就是session存储在内存中,那服务器重启,session就丢失了,这就是他的弊端。现在有一些技术,例如session共享、iphash、session持久等也可以解决上述问题。


COOKIE是浏览器的一种策略。上述讲到了sessionid就是存储在COOKIE中的。我们知道http协议是无状态的,COOKIE就是用来解决的。COOKIE中可以用来保存服务端返回的一些用户信息的,例如前文提到的token、sessionid。每一次的请求,都会携带这些COOKIE。服务端从请求头中取到COOKIE中的信息,就可以识别本次请求的来源,这样,http是不是就变成有状态的了。这里说几点COOKIE注意事项。

COOKIE是浏览器的一种策略。上述讲到了sessionid就是存储在COOKIE中的。我们知道http协议是无状态的,COOKIE就是用来解决的。COOKIE中可以用来保存服务端返回的一些用户信息的,例如前文提到的token、sessionid。每一次的请求,都会携带这些COOKIE。服务端从请求头中取到COOKIE中的信息,就可以识别本次请求的来源,这样,http是不是就变成有状态的了。

这里说几点COOKIE注意事项。

1、COOKIE存放在客户端,所以是不安全的。人为可以清除

2、COOKIE有过期时间设定。如果不设置过期时间,说明这个COOKIE就是当前浏览器的会话时间,浏览器关了,COOKIE 就存在了。如果有过期时间,COOKIE就会存储到硬盘上,浏览器关闭不影响COOKIE。下次打开浏览器,COOKIE还存在

3、COOKIE有大小的限制,4KB。

Token, 令牌,代表执行某些操作的权利的对象。

token主要用于鉴权使用,主要有以下几类:

  • 访问令牌(Access token)表示访问控制操作主体的系统对象
  • 邀请码,在邀请系统中使用
  • Token, Petri 网(Petri net)理论中的Token
  • 密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备
  • 会话令牌(Session token),交互会话中唯一身份标识符
  • 令牌化技术 (Tokenization), 取代敏感信息条目的处理过程

COOKIE主要是网站用于在浏览器临时存放的数据,包括浏览器缓存数据以及服务器设定的一些数据,主要存放在浏览器端。

session主要用于保存会话数据,一般存储在服务器端,同时每一条session对用一个sessionID,sessionID是存放在浏览器的COOKIE中。

传统上的会话登陆和鉴权主要用session加COOKIE实现,随着分布式系统的快速演进,尤其是微服务的应用,token+COOKIE的授权访问机制得到亲睐,通常在用户登录后,服务器生成访问令牌(Access token),浏览器存储COOKIE中,在每次请求资源时都会在请求头中带上token,用于服务器授权访问使用。

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
吸猫伐是什么意思 吸猫是吸哪里 作为铲屎官,相信对于网络上流行的各种与猫咪相关的梗都是了然于心的,什么吸猫啦,撸猫啦,云养猫啦……等...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...