67、Session和Token的区别

67、Session和Token的区别

00:00
04:26

1. 为什么要有session的出现?
答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的。

2. session生成方式?
答:浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,
然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中或则redis当中,
然后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。
然后服务器根据sessionid找到对应的session进行匹配。这个在上次节目中说过。

3. 为什么会有token的出现?
答:首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的。
而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

4. token的生成方式?
答:浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的SHA256算法,然后加一个密钥,
生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,
然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

5. token和session的区别?
token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
session服务器会保存一份,可能保存到缓存,文件,数据库;
session和token都是有过期时间一说,都需要去管理过期时间;
其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证
,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。 
而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢? 

token的使用可以参考:json web token(JWT);

以上内容来自专辑
用户评论
  • 陈晨辰yo

    区别: 都有过期时间,session保存在服务器,而token保存在客户端。session是空间换时间,而token是时间换空间。 token 设计为自包含,每次一个无状态请求,每次解密验证判断请求是否合法 而 sessionid 需要到后端校验 有效性,强依赖于服务器的稳定性

  • 陈晨辰yo

    会话session: 浏览器第一次访问服务器,服务器会创建一个session保存在缓存,对应的sessionid以cookie的形式发送给客户端。浏览器再次访问时,可以根据cookie中的sessionid找到对应的session进行匹配。 令牌token: 根据浏览器传过来的唯一标识userId,通过SHA256算法加密生成token,然后通过BASE64编码后发送回客户端;客户端下次请求时,带着token,服务器会用相同的算法和密钥去验证token

  • 小城大爱_pl

    对我们面试很有帮助,谢谢