JavaWeb-022-HttpSession的生命周期

来源:互联网 发布:flux电磁场仿真软件 编辑:程序博客网 时间:2024/06/08 16:53

Session 的创建和销毁

1). 默认情况下, 第一次访问一个 WEB 应用的一个 JSP 页面时, 该页面都必须有一个和这个请求相关联的 Session 对象.
因为 page 指定的 session 属性默认为 true
2). 若把 session 属性改为 false, JSP 页面不会要求一定有一个 Session 对象和当前的 JSP 页面相关联,所以若第一次访问当前 WEB 应用的 JSP 页面时, 就不会创建一个 Session 对象.
3). 创建一个 Session 对象: 若 page 指定的 session 设置为 false ,则 在 Servlet 中可以通过以下 API 获取 Session 对象.

request.getSession(flag): - 若 flag 为 true, 则一定会返回一个 HttpSession 对象:  如果已经有和当前 JSP 页面关联的 HttpSession对象, 直接返回;   如果没有, 则创建一个新的返回.- 若flag 为 false: 若有关联的, 则返回; 若没有, 则返回 null。request.getSession(): - 相当于 request.getSession(true);

4). Session 对象的销毁:
①. 直接调用 HttpSession 的 invalidate()
②. HttpSession 超过过期时间.

返回最大时效: getMaxInactiveInterval() 单位是秒
设置最大时效: setMaxInactiveInterval(int interval)
可以在 web.xml 文件中配置 Session 的最大时效, 单位是分钟(可以是单独的web应用设置,也可以是在Tomcat下面的总web.xml设置(作业与全局)).

    <session-config>        <session-timeout>30</session-timeout>    </session-config>

③. 卸载当前 WEB 应用.
注意: 关闭浏览器不会销毁 Session(服务器上的还在)!
关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。
关闭服务器,存在session的序列化,在服务器重新启动的时候会反序列化重新读取回来。

两个浏览器窗口访问应用程序会使用同一个session

  • 通常session cookie是不能跨窗口使用的(IE 8 版本以前),当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样信息共享的目的就达不到了。
  • 此时可以先把session id保存在persistent cookie中(通过设置cookie的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合就可以实现了跨窗口的会话跟踪。

Session的超时管理

  • WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。
  • 随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。
  • WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。
  • 如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。
  • 会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。
    <session-config>        <session-timeout>30</session-timeout>    </session-config>

其它

  • 源码下载
关注下方公众号,回复:javaweb_course.code
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

原创粉丝点击