文章目录回顾 Cookie理解 SessionCookie 和 Session 的区别回顾 CookieHTTP 协议自身是属于“无状态”协议无状态默认情况下HTTP 协议的客户端和服务器之间的这次通信和下次通信之间没有直接的联系但是在实际开发中我们很多时候是需要知道请求之间的关联关系的例如登录网站成功后第二次访问的时候服务器就能知道该请求是否是已经登录过了上述图片中的“令牌”通常就存储在Cookie字段中比如去医院挂号看病之前先挂号挂号时需要提供身份证号同时得到一张“就诊卡”这个就诊卡就相当于患者的“令牌”后续去各个科室进行检查、诊断、开药等操作都不必再出示身份证了只要凭“就诊卡”就可以识别出当前患者的身份看完病之后不想要就诊卡了就可以注销这个卡。此时患者的身份和就诊卡的关联关系就被销毁了类似于网站的注销功能又来看病可以办一张新的就诊卡此时就得到了一个新的“令牌”此时在服务器这边就需要记录“令牌”的信息以及令牌对应的用户信息这个就是Session机制所做的工作理解 Session会话就是对话的意思在计算机领域会话是一个客户与服务器之间的不中断的请求响应。对客户的每个请求服务器能够识别出请求来自于同一个客户。当一个未知的客户向 Web 应用程序发送第一个请求时就开始了一个会话。当客户明确结束会话或服务器在一个时限内没有收到客户的任何请求时会话就结束了比如我们打客服电话每次打客服电话都是一个会话挂断电话会话就结束了下次再打客服电话就又是一个新的会话如果我们长时间不说话没有新的请求会话也会结束服务器同一时刻收到的请求时很多的。服务器需要清楚地区分每个请求时从属于哪个用户也就是属于哪个会话就需要在服务器这边记录每个会话以及与用户的信息的对应关系Session是服务器为了保存用户信息而创建的一个特殊的对象Session的本质就是一个“哈希表”存储了一些键值对结构。Key就是SessionValue就是用户信息用户信息可以根据需求灵活设计SessionId是由服务器生成的一个“唯一性字符串”从Session机制的角度来看这个唯一性字符串称为“SessionId”。但是站在整个登录流程中看待也可以把这个唯一性字符串称为“token”上述例子中的令牌 ID就可以看做是SessionId只不过令牌除了 ID 之外还会带一些其他信息比如时间、签名等token和SessionId是相似的但是不一样。token是身份的证明SessionId是其中一种实现方式当用户登录的时候服务器在Session中新增一个新纪录并把SessionId返回给客户端通过 HTTP 响应中的Set-Cookie字段返回客户端后续再给服务器发送请求的时候需要在请求中带上SessionId通过 HTTP 请求中的Cookie字段带上服务器收到请求之后根据请求中的SessionId在Session信息中获取到对应的用户信息再进行后续操作。若找不到则重新创建Session并把SessionId返回Session默认是保存在内存中的。如果重启服务器则Session数据就会丢失Cookie 和 Session 的区别Cookie是客户端保存用户信息的一种机制。Session是服务器端保存用户信息的一种机制Cookie和Session之间主要是通过SessionId关联起来的SessionId是Cookie和Session之间的桥梁Cookie和Session经常会在一起配合使用但不是必须配合完全可以用Cookie来保存一些数据在客户端。这些数据不一定是用户身份信息也不一定是SessionIdSession中的SessionId也不需要非得通过Cookie/Set-Cookie来传递比如通过URL来传递