session原理(依赖Cookie)
- 我们都知道 HTTP 是无状态协议,但是为什么 session 可以跟踪会话状态呢?没错,session 依赖 Cookie。
当客户端第一次访问服务器时,服务器会为客户端创建一个 session 对象,然后把 session 对象放到 session 池中,在响应时把 sessionId 通过 Cookie 响应给客户端。注意,只有在第一次访问时,服务器才会创建 session,给客户端响应 sessionId。从此以后就不会了! - 当客户端再次访问服务器时,会在请求中带着 sessionId 给服务器,服务器通过 sessionId 到 session 池中找到 session 对象,这就可以完成会话跟踪了。也就是说,服务器端保存的是 session 对象,而客户端只有 sessionId。每次访问都需要通过客户端的 sessionId 来匹配服务器端的 session 对象!这样用户在 session 中保存的数据就可以再次被使用了。
sessionId 是服务器通过 Cookie 发送给客户端浏览器的,这个 Cookie 的 maxAge 为 -1,即只在浏览器内存中存在。如果你关闭所有浏览器窗口,那么这个 Cookie 就会消失了!
如有错误,欢迎指正!