美文网首页JavaWeb
JavaWeb-022-HttpSession的生命周期

JavaWeb-022-HttpSession的生命周期

作者: 53b3f4658edc | 来源:发表于2017-12-11 16:54 被阅读3次

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
完整教程PDF版本下载

相关文章

  • JavaWeb-022-HttpSession的生命周期

    Session 的创建和销毁 1). 默认情况下, 第一次访问一个 WEB 应用的一个 JSP 页面时, 该页面都...

  • Vue生命周期

    什么是生命周期方法?生命周期钩子=生命周期函数=生命周期事件 Vue生命周期方法分类  创建期间的生命周期方法: ...

  • 10,vue生命周期

    生命周期钩子=生命周期函数=生命周期事件 根据生命周期的不同分为三类: 创建阶段的生命周期 运行阶段的生命周期 销...

  • 微信小程序生命周期的记录

    小程序中生命周期分为3类: 应⽤的生命周期 页面的生命周期 组件的生命周期 一、生命周期 1. 应⽤的生命周期[h...

  • Lifecycle 生命周期源码解析

    目录: 什么生命周期 什么是生命周期感知型组件 Activity是如何把生命周期传给生命周期感知组件的 生命周期 ...

  • uni-app微信小程序开发 - 生命周期

    uni-app的生命周期分为应用生命周期和页面生命周期还有组件生命周期。 应用生命周期[https://uniap...

  • Activity,Fragment,Service生命周期图

    Activity生命周期 Fragment生命周期 Service生命周期

  • iOS 生命周期问题

    引言: 生命周期包括:a.程序的生命周期b.控制器的生命周期c.试图的生命周期 程序生命周期 a. 首次启动, 会...

  • Flutter 的生命周期

    Flutter 的生命周期Flutter 的生命周期分为两个部分: Widget 的生命周期App 的生命周期Fl...

  • 详细的分析 Vue生命周期

    Vue 的生命周期 生命周期执行的函数叫法有三种: 生命周期钩子 生命周期函数 钩子函数 生命周期钩子概念: 在v...

网友评论

    本文标题:JavaWeb-022-HttpSession的生命周期

    本文链接:https://www.haomeiwen.com/subject/dvaiixtx.html