在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
关于HttpSession对象
-
Session的作用 Session的作用就是为了标识一次会话,或者说确认一个用户。并且在一次会话(一个用户的多次请求)期间共享数据,可以通过req.geySession()方法,来获取当前会话的session对象。
-
JSESSIONID SessionId是为了标识一次会话的唯一标志。每当一次请求到达服务器,如果开启了会话(访问了session),服务器第一步会查看是否从客户端回传一个名为JSESSONID的cookie: 1)、如果JSESSIONID不存在,则服务器会新建session对象,并重新标识; 2)、如果JSESSIONID存在,服务器会将客户端回传过来的ID去服务器中查找与之对应的session对象。 3)、如果没找到,则服务器会新建session对象,并重新标识; 4)、如果找到,则获取session对象,响应给客户端
-
Session域对象 通过setAttribute(name,value); 方法向域对象中添加数据。 通过getAttribute(name); 从域对象中获取数据。 通过removeAttribute(name);从域对象中移除数据。
-
Session的失效 1)、达到最大不活动时间 Tomcat中默认最大不活动事件为30min。 可以自行修改默认不活动时间,但不建议。 2)自己设定过期时间 通过session.setMaxInactiveInterval(int);来设定session的最大不活动时间,单位为秒。 通过getMaxInactiveInterval()方法来查看当前session对象的最大不活动时间。 3)、立即失效 手动销毁session对象 session.invalidate(); 4)、关闭浏览器 session的底层依赖于cookie,默认关闭浏览器失效。 5)、关闭服务器 非正常关闭服务器才会失效。 如果是正常关闭服务器,session会被钝化到本地磁盘,下次访问时会从本地磁盘中活化出来。
public class Servlet01 extends HttpServlet {
设置session的失效时间
session.setMaxInactiveInterval(); // 单位:秒
设置session的失效时间也可以通过以下方式, 在web.xml中进行统一设置
<!-- 可以设置session 的有效时间 -->
<session-config>
<!-- 以分钟为单位 -->
<session-timeout>1</session-timeout>
</session-config>
setMaxInactiveInterval和session-config的比较:
1、setMaxInactiveInterval的优先级高,如果setMaxInactiveInterval没有设置,则默认是session-config中设置的时间。
2、setMaxInactiveInterval设置的是当前会话的失效时间,不是整个web服务的。
3、setMaxInactiveInterval的参数是秒,session-config当中配置的session-timeout是分钟。
4、设置setMaxInactiveInterval(-1)是永久有效。(负数或0)
public class Servlet02 extends HttpServlet {
输出如下,一旦注销,会产生一个新的sessionID