HttpSession对象

Posted Vodka~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpSession对象相关的知识,希望对你有一定的参考价值。

1.HttpSession对象是javax.servlet.http.HttpSession的实例,不同于HttpServletRequest 和 HttpServletResponse 有父接口,该对象只是一个纯粹的接口,因为Session 属于HTTP协议的范畴。

2.对于服务器而言,每一个连接到它的客户端都是一个session,servlet容器使用此接口创建HTTP客户端和HTTP服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点,因此可以通过此接口查看和操作有关的某个会话的信息: 会话标识符,创建时间,最后一次访问时间等等。

3.session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览器,则无法取得之前设置的session,因为每一个session只保存在当前的浏览器中,并在相关页面取得。

4.可以通过request.getSession();来获取当前会话的session对象(如果已存在则直接获取,不存在则创建)。

5.标识符JSEESSIONID:
-当前会话的唯一标志,就是sessionid。
-每当一次请求到达服务器,如果开启了会话(访问了session) , 服务器会先查看客户端是否传回一个名为JSESSIONID 的cookie,如果没有该cookie,则认为当前会话是一次新的会话,就新创建一个session对象,并设置唯一的JSESSIONID标志。相反,若有JSESSIONID这个cookie回传到服务器,则根据标志的值去查找含有相应JSESSIONID的session对象,并认为此次会话是之前标志过的会话,并返回相应session对象,达到数据共享的目的。
-JSESSIONID的cookie,该cookie比较特殊,当用户请求服务器时,如果访问了session,服务器则会创建一个名为JSESSIONID(值为当前访问的session的sessionId的cookie对象),并添加到response对象中,再响应给客户端,有效时间为第一次访问服务器直到关闭浏览器,所有session的底层原理是Cookie。

6.session域对象
-Session 用来表示一次会话,在一次会话中数据可以共享,这时session 作为域对象存在,可以通过setAttribute(name,value); 方法来向域中添加数据,通过getAttribute(name)从域对象中获取数据,通过removeAttribute(name) 从域对象中移除数据。
-数据存储在session域对象中,当session对象不存在了,或者是两个不同的session对象时,数据也就不能共享了。
-session作用域: 对于(一次请求)请求转发 ,或是 (两次请求)重定向,session的作用域都是有效的,而request作用域,仅在一次请求中有效。

HttpSession session = request.getSession();
session.setAttribute("uname","admin");
String Name = (String) request.getAttribute("uname");
session.removeAttribute("uname");

7.session对象的销毁
-默认时间到期:
当客户端第一次请求servlet 并且操作session时,session对象生成,Tomcat中session默认的存活时间为30min,即不操作界面默认存活时间,若有界面操作,session会重新计时。
-修改默认时间:
1.在Tomcat中的conf 目录下的 web.xml 文件中进行修改。
2.自行设定到期时间:
HttpSession session = request.getSession();
session.setMaxInactiveInterval(15); //设置最大不活动时间: 15s
session.getMaxInactiveInterval(); //查看当前 Session 对象的最大不活动时间
3.销毁:
-设定时间到期,session自行销毁
- session.invalidate(); 立刻失效
- 关闭浏览器 : 因为Session的底层实现是依赖cookie的,浏览器关闭,cookie也失效了,所以session也失效(没有JSESSIONID与之对应)。
- 关闭服务器

<!--session默认的最大不活动时间。单位:分钟 -->
<session-config> 
     <session-timeout> 30 </session-timeout>
</session-config>

以上是关于HttpSession对象的主要内容,如果未能解决你的问题,请参考以下文章

serclet容器为每一个httpsession 对象分配一个唯一标识符,叫做啥

HttpSession对象

关于HttpSession

如何在 HttpSession 中存储 Java 对象?

3.HttpSession

如何获取 Web 应用程序中所有 HttpSession 对象的列表?