在使用HttpSession进行会话管理十分方便,让Web应用程序看似可以“记得”浏览器发出的请求,连接数个请求间的关系。但是无论如何,Web应用程序基于HTTP协议的事实并没有改变,实际上如何“取得”数个请求间的关系,这件工作是由Web容器帮你执行。
getSession()
当运行HttpServletRequest的**getSession()**时,Web容器会创建HttpSession对象,每个HttpSession对象都会有一个特殊ID,称为Session ID,其值可以通过HttpSession对象的getId()取得,Session ID默认使用Cookie存放在浏览器。在Tomcat中,Cookie的名称是JSESSIONID,数值则是getId()所取得的SessionID
HttpSession对象
但是由于Web容器本身是执行于JVM中的一个java程序,通过getSession()取得HttpSession,是Web容器中的一个java对象,HttpSession中存放的属性,自然也就存放于服务端的Web容器之中。当浏览器请求应用程序时,会将cookie中存放的Session ID一并发给应用程序,Web容器会根据Session ID来找到对应的HttpSession对象,这样就可以取得个浏览器个别的会话数据。所以使用HttpSession来进行会话管理时,设定为属性的对象时存储在服务器端,而Session ID默认使用的Cookie存放于浏览器端。Web容器存储Session ID的Cookie“默认”为关闭浏览器就失效,所以重新启动浏览器请求应用程序时,通过getSession()取得的是新的HttpSession对象。
每次请求来到应用程序,容器会根据发送过来的Session ID取得对应的HttpSession。(而在一种getSession方法中,传入的是布尔值,默认为true,若尚未存在HttpSess

本文详细介绍了Java Web中的HttpSession会话管理,包括getSession()方法的使用、HttpSession对象的工作原理、以及Session管理策略。重点阐述了Session ID如何通过Cookie在客户端与服务器之间传递,确保Web应用能识别不同请求之间的关联。同时提醒开发者注意合理管理HttpSession,避免存储大型对象并适时调用invalidate()方法使Session失效。
最低0.47元/天 解锁文章
3900

被折叠的 条评论
为什么被折叠?



