Session生命周期讨论

Session生命周期用户退出时间序列化 

文章级别:Java初级    预备技能点:JSP内置对象, 监听器, 序列化

在程序开发的时候, request session appplication内置对象, 是用的比较多的. request和appliction比较简单, 一个代表一次请求的生命周期. 另一个代表应用程序的生命周期. 多说一点application是单态模式. 在任何地方打印application内置对象,得到的是同一个地址. 因此可以存储程序的公共变量,而非个人的公共变量(个人的公共变量 例如登录信息) 应该存储到Session中
今天我就详细讲解下中间那个兄弟. 因为在网上看到很多文章. 几乎毫无例外的说. 一个浏览器只有一个Session, 浏览器关闭Session就消失了.其实这种方法是不正确的.
要了解Session首先要知道一个概念:Session的销毁只有两种情况:第一:session调用了 session.invalidate()方法. 第二:前后两次请求超出了session指定的生命周期时间. 其中Session的生命周期时间可以在web.xml配置. 默认30分钟 在web.xml可以做如下配置:
<session-config>
      <session-timeout>5</session-timeout>
</session-config>
如何来证明关闭浏览器的时候Session没有销毁呢?  我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的.代码如下:


 
别忘记在web.xml中配置监听器, 配置完毕后 可以做个测试. 当浏览器关闭后此监听器的 sessionDestroyed方法并没有执行,而是在5分钟左右(个人电脑没有那么精确) 才会触发sessionDestroyed ,当然 再打开浏览器的时候 sessionCreated 会自动调用 关闭5分钟后sessionDestroyed 又会自动调用, 通过getID方法大家可以判断是否为同一个Session. 所以网上说明的关闭浏览器Session就消失.其实并不正确. 如果没有任何配置的情况下. 关闭浏览器30分钟后Session才会消失的.
我们可以利用这个概念做什么呢? 最典型的就是利用 SessionListener  的sessionDestroyed方法 来记录用户非正常退出的时间. 用户在访问某个网站的时候(目前的银行网站都有此功能) 显示了用户的最后登录时间. 此时间如何获取. 在这里分两种情况
如果用户按"退出" 按钮那就好说了. 跳转到action中.记录下用户退出的时间. 存储到持久层中
如果用户非正常退出, 在没有配置Session的情况下 默认会在30分钟后调用sessionDestroyed 那么我们同样可以在此获取用户退出的时间,在sessionDestroyed 调用业务逻辑完成我们想要实现的功能
有关Session第2个典型的应用就是Session中存储了用户的登录信息. 那么就可以访问用户权限的一些页面.
       有关这个应用要注意一个问题: 存储到session中的 User对象一定要实现Serializable接口. Serializable的作用可以参考相关资料.正常情况下当我们做测试的时候关闭Tomcat 大家会在  Tomcat安装目录\work\Catalina\localhost\项目名 文件夹下面看到有一个 SESSIONS.ser 的文件.


 
此文件就是Session在Tomcat停止的时候 持久化到硬盘中的文件. 所有当前访问的用户Session都存储到此文件中. Tomcat启动成功后.SESSIONS.ser  又会反序列化到内存中,所以启动成功后此文件就消失了. 所以正常情况下 从启Tomcat用户是不需要登录的. 注意有个前提.就是存储到Session里面的user对象所对应的User类必须要序列化才可以

java Session生命周期讨论相关推荐

  1. java session 生命周期_Java架构师第十四步——Session的生命周期(读书笔记)

    Session生命周期 Session中的数据保存在服务器端,在客户端需要的时候创建Session,在客户端不需要的时候销毁Session,使它不再占用服务器内存.前面说了服务器并不管客户端是否依然存 ...

  2. java session 生命周期_Java中httpsession生命周期

    Java中httpsession生命周期 HttpSession会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束,那么从用户访问到退出浏览器它的生命周期过程如下: 1. 当浏览器A向服务 ...

  3. java session 生命周期_JavaWeb关于session生命周期的几种设置方法

    一般session的生命周期都是建立在用户登录系统后对用户信息进行一个记录,session类似于你有一张银行卡,而卡里的钱就是属于session存储的信息,卡掉了就不能取出里面的钱. 以前sessio ...

  4. java session 生命周期_java之hibernate之session中对象的生命周期

    1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...

  5. Java 对象生命周期和类生命周期

    Java 对象生命周期 在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation).应用阶段(Using).不可视阶段(Invisible).不可到达阶段(Unreach ...

  6. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

  7. java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时

    面试官:你不是精通 Java 并发吗?从基础的 Java 线程生命周期开始讲讲吧. 好的,面试官.吧啦啦啦... 如果要说 Java 线程的生命周期的话,那我觉得就要先说说操作系统的线程生命周期 因为 ...

  8. php设置session 生命周期,设置session的生命周期(php)

    PHP中,Session变量保存在服务器端(默认以文件格式保存),而Session ID以cookie形式保存在客户端. 销毁session的方法有2种 第一种是通过程序 session_destor ...

  9. php设置session 生命周期,php会话(session)生命周期概念介绍及设置更改和回收

    http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议.所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的.而越来越复杂的WEB应用,需要保存一些用户状 ...

  10. Java 对象生命周期

    Java 对象生命周期 一直对Java对象的实例化.对象.对象的引用.堆 栈存放的内容迷惑不解.看了 Java编程思想,理解似乎又深了一层. 对象和对象的引用 Java 编程思想中,把对象的引用比喻成 ...

最新文章

  1. HTML怎么实现字体加粗
  2. unicode and utf-8
  3. ubuntu16.04安装VMware网络配置
  4. 笔记本电脑没有鼠标怎么右键_联想笔记本电脑没有声音怎么修复
  5. java多线程总结二:后台线程(守护线程)
  6. python相似图片识别_Python+Opencv识别两张相似图片
  7. 机器学习之 sklearn.preprocessing 模块
  8. 实测实量数据表格_建筑工程质量实测实量操作手册,130页PPT下载!
  9. 使用磁盘为Linux添加swap
  10. C# 在winform中如何为按钮设置快捷键( F1)
  11. 转----cer文件和pfx文件的区别
  12. mvn help:system下载包失败错误解决!
  13. 2022年电子商务概论(农)之形考作业二
  14. IDEA安装Vue插件
  15. vs code 突然不能粘贴和复制
  16. Deep Knowledge Tracing
  17. linux cpu 时间,【Linux】CPU时间与处理器耗时
  18. MT6737芯片平台处理器功能介绍资料
  19. 阿里企业邮箱服务器配置
  20. 办公软件excel表格_Office 办公软件教程丨Word,Excel,PPT

热门文章

  1. 如何在虚拟机中安装wp8的sdk,无法启动模拟器问题
  2. Mountain Lion 10.8
  3. R爬虫可视化第五季-图解欧洲足球五大联赛
  4. java基础 泛型类的定义
  5. python 利用栈实现复杂计算器
  6. javascript -- 变量
  7. 解决:/bin/bash: mvn: 未找到命令
  8. 第七章 面向对象分析
  9. Quartz CronTrigger最完整配置说明
  10. 谷歌宣布将向四川雅安地震灾区捐款500万元