原标题:Web开发中的Session详解及原理分析
一. HttpSession机制
1. HTTP协议与HttpSession的状态保持
Session经常被翻译为会话,其本来的含义是指有始有终的一系列动作/消息。比如打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个Session。而在网络中,Session是指从一个浏览器窗口打开再到关闭的这个期间。
互联网应用层协议基本都是基于 HTTP 和 HTTPS 协议的,它们的本身都是无状态的, 也就是只负责网络的请求和响应。 我们只需要告诉服务器我们需要什么,服务器就会给我们返回相应的资源。 如果没有额外处理的话,服务器并不知道发起请求的人是谁,也无法根据请求者是谁来给你展现和你相关的内容了。
HTTP 协议之所以一开始被设计成这样,还是有一些历史原因的,当时的互联网多用于学术交流,只用于文章信息的展现,远没有像现在这么丰富多彩。所以在当时的背景下, HTTP 协议被设计成这样,其实也是很符合它的场景的。
但随着互联网应用越来越广泛,应用的形式也变得越来越多,我们的 Web 应用已不只限于提供简单的信息展现了,还需要用户能够与服务器进行交互,比如能够登录,可以在留言回复、可以进行购物、社交等。 这就需要 HTTP 协议能够记录用户的状态,而这个状态就可以由HttpSession来进行保存。
2. HttpSession工作原理
Client(浏览器)第一次发送请求的时候,Web Container(Tomcat、Jetty等服务器容器)会生成唯一的Session ID(这个Session ID包括随机数+时间+JVM ID),并将其返回给Client(在Web Container返回给Client的Response中),但是Web Container上的这个HttpSession是临时的。
接下来Client在每次发送请求给服务器时,都会将Session ID发送给Web Container,这样Web Container就能很容易区分出是哪个Client。
Web Container会使用这个Session ID,找到对应的HttpSession,并将这个Request与这个HttpSession联系起来。
当用户第一次访问Servlet时,服务器端会给用户客户端创建一个独立的S