• session和cookie和token


    session:

            session机制是一种服务端机制,服务器使用一种类似散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端里的请求是否已包含了一个session标识-sessionId,如果已包含一个sessionId,则说明已经为此客户端创建过session,服务器就按照sessionId把session检索出来使用。如果客户端请求不包含sessionId,则为此客户端创建 一个session并且声明一个与此session相关联的sessionId,sessionId是一个既不会重复,又不会被找到规律被仿造的字符串(服务器会自动创建)这个sessionId会在本次响应中返回给客户端保存。

    cookie:

            cookie实际上是一小段的文本信息,cookie是由服务器产生的。当浏览器第一次访问服务端时,服务器此时不知道访问者的身份,会创建一个独特的身份标识数据,格式为key-value,放到set-cookie字段里,随着响应报文发送给浏览器。浏览器看到有set-cookie字段以后就知道这是服务器给的身份标识,保存起来,下次请求会将此key=value放入到cookie中发送给服务端。服务端收到请求后发现cookie中有值,就能根据此值识别用户身份。

    token:

            在服务端经过base64URL编码后传给在客户端,每次客户请求的时候都会带上这一段信息,因此服务端拿到此段信息解密后就知道此用户是谁了,这个方法叫做JWT(JSON Web Token)。token类似一个令牌,无状态的。服务端所需的信息被base64编码后放到token中,服务器可以直接编码出其中的数据。

    session和cookie的区别

    1.         session数据放在服务器上,cookie数据放在客户的浏览器上。
    2.         考虑安全应该使用session,cookie不是很安全,可以使用本地的cookie进行欺骗。
    3.         session会在一定时间内保存在服务器上。当访问曾多,会比较占用服务器的性能。考虑性能应该使用cookie。
    4.         单个cookie只能保存4k数据,很多浏览器限制一个站点最多保存20个cookie,session可以存储任意类型的java对象,而cookie只能存储string类型对象。

    session和token的区别

    1.         token支持跨域访问,而session不支持。
    2.         无状态化, 服务端无需存储token ,只需要验证token信息是否正确即可,而session需要在服务端存储,一般是通过cookie中的sessionID在服务端查找对应的session。
    3.         token更适用于移动端 (Android,iOS,小程序等等)。
    4.         token可以避免CSRF跨站伪造攻击 ,还是因为不依赖cookie。
    5.         token可以通过URL,POST参数或者是在HTTP头参数发送,因为数据量小,传输速度也很快。
    6.         token由于字符串包含了用户所需要的信息,避免了多次查询数据库,因为Token是以JSON的形式保存在客户端的,所以JWT是跨语言的,不需要在服务端保存会话信息,特别适用于分布式微服务。

            

            

            

            

  • 相关阅读:
    【线程池总结】
    基于Redis商品库存扣减方案
    在职读博|中国社科院-英国斯特大学灵合作办学双证管理学博士
    linux 基础,你掌握了几个?
    修复 Windows 上的 PyTorch 1.1 github 模型加载权限错误
    React-Native优质开源项目介绍
    C#开发的OpenRA游戏之金钱系统(4)
    微信支付——微信H5支付实战教程(微信支付v3版本java)
    安装配置 IDE
    rsync远程同步
  • 原文地址:https://blog.csdn.net/Myuanforever/article/details/125484690