• 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是跨语言的,不需要在服务端保存会话信息,特别适用于分布式微服务。

            

            

            

            

  • 相关阅读:
    devres驱动笔记
    算法训练营day17
    环保行业采购协同管理系统:助推环保行业电子采购管理转型升级
    华为手机怎样设置每月8号18号28号提醒的备忘录
    使用ESP8266构建家庭自动化系统
    MySQL笔记总结
    解决PlatformIO下载速度慢以及容易出错(解决vscode下载缓慢问题)
    BUUCTF msic 专题(125)[GUET-CTF2019]soul sipse
    微服务最强理论基础,堪称绝妙心法
    ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of
  • 原文地址:https://blog.csdn.net/Myuanforever/article/details/125484690