cookie session token的关系和区别

用户和服务器通过发送http请求进行交互,而http是一个无状态协议,也就是说这一次请求和上一次的请求之间是没有任何关系的。为了让服务器知道是同一个用户端发送的请求,我们可以通过浏览器保存一些信息,每次发送请求的时候都带到服务器端,服务端根据这些信息来判断是不是同一个用户进行的访问。

cookie和session

客户端访问服务端的流程为:

  1. 客户端发送一个http请求到服务器端。
  2. 服务器端接收请求后,分配给该客户端一个session空间,并发送一个http响应到客户端,这个响应头,其中包含了Set-cookie头部,该头部包含了sessionid。
  3. 当客户端再次发送请求时,cookie会被自动带到服务器端。
  4. 服务器收到cookie后解析出sessionId,再去session列表中查找,找到相应的session,也就是找到了相应的客户端。

node中使用cookie-session 中间件判断用户的状态

如果清除了浏览器的数据,相当于把cookie也清了,那么你的sessionId也就没有了,所以当你再次请求的时候服务器无法获得你的cookie,也就没有办法获取sessionid(如果你的sessionid是存在url里的,那种情况除外),相应地,也就找不到对应的session,不能对当前请求用户的状态进行判断。

注意:cookie只是实现session的一种方案,虽然是最常用的,但是并不是唯一的方法,禁用cookie后,还有其他方法对sessionid进行存储,比如可以放在url中。

cookie

  • cookie实际上是一小段的文本信息。由服务器生成,发送给浏览器。
  • cookie也可以由javascript 在客户端中进行存储。
  • 当浏览器再次请求该网站时,浏览器把请求连同该cookie一同提交给服务器。
  • cookie类似一个令牌,装有sessionId,存储在客户端。
  • 服务器根据cookie 携带的sessionid 来获取对应的session,以此来辨认用户状态。

点击查看更多关于cookie的详细内容

session

  • session表示服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。
  • 当客户端浏览器访问服务器的时候,服务器会在内存为该浏览器分配一个空间,这个空间就是session。
  • 每一个客户端都有唯一的sessionid。
  • session的创建与使用总是在服务端,浏览器从来都没有得到过Session对象。
    session

如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要根据sessionid查询客户档案表就可以了。

token

token 也称作令牌,是用户身份的验证方式。由 uid+time+sign[+固定参数] 组成。

token的认证流程和cookie很相似,唯一不同的是cookie数据始终在同源的http请求中携带(即使不需要),而token数据是手动发送给服务端。

token的组成

  • uid: 用户唯一身份标识
  • time: 当前时间的时间戳
  • sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
  • 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

token在客户端一般存放于localStorage或sessionStorage中。在服务器一般存于数据库中。

token的认证流程

JSON Web Token(缩写 JWT)就是使用token来抵御CSRF攻击。

在用户登录成功后,返回一个随机token给浏览器,当每次用户发送请求的时候,将token 主动发送给服务器端,服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

node中使用JsonWebToken 解决CSRF漏洞

总结

  • cookie类似一个令牌,装有sessionId,每一个客户端有自己唯一的cookie,存储在客户端,始终在同源的http请求中携带。
  • session存储于服务器,是一个容器,存放唯一的客户端。
  • 服务器根据cookie中的sessionid,去找对应的session,以此来辨认用户状态。
  • token与cookie类似,每一个客户端有自己唯一的token。不同于cookie的是它需要开发者手动添加到请求头中。
发布了130 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Charissa2017/article/details/105180341