HttpSession的生命周期:
1、创建一个HttpSession对象
一个常见的错误是以为在有客户端访问时就被创建(若第一次访问某WEB应用的一个JSP页面,且该JSP页面的page指定的session属性为false)
- 某servlet端程序(如servlet)调用HttpServletRequest.getSession()或HttpServletRequest.getSession(true)这样的语句才会被创建。
- 若第一次访问某WEB应用的一个JSP页面,且该JSP页面的page指定的session属性为true,服务器会自动为该页面分配一个HttpSession对象。
2、销毁HttpSession对象:
- 程序调用HttpSession对象的invalidate()方法
- 距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间(默认30分钟,以秒为单位)
- 服务器进程被停止(或当前WEB应用被卸载)
注意:关闭浏览器只会使存储在浏览器内存的session cookie失效(默认cookie失效情况),不会使服务端的session对象失效(URL重写或持久化cookie的方式仍然可以找到该session对象)。
URL重写:
servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie的浏览器也可以与WEB服务器保持连续的会话。
login.jsp代码:
<form action="<%= response.encodeURL("hello.jsp") %>" method="post">
username: <input type="text" name="username"
value="<%= username %>"/>
<input type="submit" value="Submit"/>
</form>
访问login.jsp页面后,查看源代码如下,说明可以将jsessionid(sessionid)带到下一个页面,浏览器本身存储不了这个cookie
<form action="hello.jsp;jsessionid=20F5789F3CC331C0581CB5E74B14AF27" method="post">
username: <input type="text" name="username"
value=""/>
<input type="submit" value="Submit"/>
</form>