-
介绍:
-
HttpSession接口来源于Servlet规范下一个接口。存在于Tomcat中servlet-api.jar
其实现类由Http服务器提供。Tomcat提供实现类存在于servlet-api.jar。
- 如果两个Servlet来自于同一个网站,并且为同一个浏览器/用户提供服务,
此时借助于HttpSession对象进行数据共享。
- 开发人员习惯讲HttpSession接口修饰对象称为【会话作用域对象】
-
-
HttpSession 与 Cookie 区别:【面试题】
-
存储位置:
Cookie:存放在客户端计算机(浏览器内存/硬盘)
HttpSession:存放在服务端计算机内存
-
数据类型:
Cookie对象存储共享数据类型只能是String
HttpSession对象可以存储任意类型的共享数据Object
-
数据数量
一个Cookie对象只能存储一个共享数据,只能存放一个键值对
Cookie相当于一个小盒子,只能存放String
HttpSession使用map集合存储共享数据,所以可以存储任意数量共享数据
HttpSession相当于一个大盒子,可以存储任意的数据类型。
-
参照物
Cookie相当于客户在服务端【会员卡】
HttpSession相当于客户在服务端【私人保险柜】
-
命令实现:
-
Http服务器如何将用户与HttpSession关联起来 : Cookie
-
getSession() 与 getSession(false) 的区别
-
getSession():如果当前用户在服务端已经拥有了自己的私人储物柜,
要求Tomcat将这个私人储物柜进行返回
如果当前用户在服务端未拥有自己的私人储物柜,
要求Tomcat为当前用户创建一个全新的私人储物柜。
-
getSession(false) :如果当前用户在服务端已经拥有了自己的私人储物柜,
要求Tomcat将这个私人储物柜进行返回。
如果当前用户在服务端未拥有自己的私人储物柜,
此时Tomcat将返回null。
-
-
HttpSession销毁时机:
-
用户与HttpSession关联时使用的Cookie只能存放在浏览器缓存中
-
在浏览器关闭时,意味着用户与他的HttpSession关系被切断。
-
由于Tomcat无法检测浏览器何时关闭,因此子啊浏览器关闭时并不会
导致Tomcat将浏览器关联的HttpSession进行销毁。
-
为了解决这个问题,Tomcat为每一个HttpSession对象设置【空闲时间】
这个空闲时间默认为30分钟,如果当前HttpSession对象空闲时间达到30分钟
此时Tomcat认为用户已经放弃了自己的HttpSession,此时Tomcat就会销毁
掉这个HttpSession。
-
-
HttpSession空闲时间的手动设置
在当前网站/web/WEB-INF/web.xml
<session-config> <!--当前网站中最大的空闲时间为5分钟--> <session-timeout>5</session-timeout> </session-config>
-