Cookie 是客户端的存储机制, Session 是服务端的存储机制。这两者结合使用, 来实现会话状态的存储
我先解释一下 Cookie, 它是客户端浏览器用来保存服务端数据的一种机制。
当通过浏览器进行网页访问的时候, 服务器可以把某一些状态数据以 key-value的方式写入到 Cookie 里面存储到客户端浏览器。然
后客户端下一次再访问服务器的时候, 就可以携带这些状态数据发送到服务器端, 服务端可以根据 Cookie 里面携带的内容来识别
使用者。Session 表示一个会话, 它是属于服务器端的容器对象, 默认情况下, 针对每一个浏览器的请求。Servlet 容器都会分配
一个 Session。Session 本质上是一个 ConcurrentHashMap, 可以存储当前会话产生的一些状态数据。我们都知道, Http 协议本
身是一个无状态协议, 也就是服务器并不知道客户端发送过来的多次请求是属于同一个用户。所以 Session 是用来弥补 Http 无状态
的不足, 简单来说, 服务器端可以利用session 来存储客户端在同一个会话里面的多次请求记录。基于服务端的 session 存储机
制, 再结合客户端的 Cookie 机制, 就可以实现有状态的 Http 协议。
具体的工作原理是:
1.客户端第一次访问服务端的时候, 服务端会针对这次请求创建一个会话(session), 并生成一个唯一的 sessionId 来标注这个会话。
2.然后服务端把这个 sessionid 写入到客户端浏览器的 cookie 里面, 用来实现客户端状态的保存。
3.在后续的请求里面, 每次都会携带sessionid, 服务器端就可以根据这个sessionid来识别当前的会话状态。