background image
session 机制本身并不复杂,然而其实现和配置上的灵活性却使得具体情况复杂多变。
这也要求我们不能把仅仅某一次的经验或者某一个浏览器,服务器的经验当作普遍适用的经
验,而是始终需要具体情况具体分析。
通俗的说:客户端浏览器访问某个地址,发送了一个请求,就产生一个 session 会话,
现在的浏览器都可以打开多个 tab 窗口,打开的都属于一个 session,当该浏览器关闭的时
候 session 就关闭了。若不关闭该浏览器,再次打开一个浏览器,会重新创建一个 session。
3.1 session 在何时被创建
一个常见的误解是以为 session 在有客户端访问时就被创建,然而事实是直到某 server
端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果 JSP
没有显示的使用<%@page session="false"%>关闭 session,则 JSP 文件在编译成Servlet
时 将 会 自 动 加 上 这 样 一 条 语 句 HttpSession
session
=
HttpServletRequest.getSession(true),这也是 JSP 中隐含的 session 对象的来历。
由于 session 会消耗内存资源,因此,如果不打算使用 session,应该在所有的 JSP 中
关闭它。
3.2 session 何时被删除
综合前面的讨论,session 在下列情况下被删除:
a、程序调用 HttpSession.invalidate() b、距离上一次收到客户端发送的 session id 时
间间隔超过了 session 的最大有效时间 c、服务器进程被停止
3.3 如何做到在浏览器关闭时删除 session