当前位置: 首页 > news >正文

Session的使用与管理

    Web服务器跟踪客户状态通常有以下4种方法:

    (1)建立含有跟踪数据的隐藏表格字段

    (2)重写包含额外参数的URL

    (3)使用持续的Cookie

    (4)使用Servlet API中的Session(回话)机制

    HTTP是无状态的协议。当有多个用户同时访问Web应用的某一组件时,它们的请求地址URL是相同的。

    在Java Servlet API中引入Session机制来跟踪客户的状态。Session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。

    例如,在电子邮件应用中,从一个客户登录到电子邮件系统开始,经过收信和发信等一系列操作,直至最后退出邮件系统,整个过程为一个Session。再比如,在网上书店应用中,从一个客户开始购物,到最后结账,整个过程为一个Session。

    Session拥有特定的生命周期。在以下情况中,Session将结束生命周期,Servlet容器会将Session所占用的资源释放掉:

  (1)客户关闭浏览器

  (2)Session过期

  (3)服务器端调用了HttpSession的invalidate()的方法

    Note:Session过期是指当Session开始后,在一段时间内客户没有和Web服务器交互,这个Session会失效,HttpSession类的setMaxInactiveInterval()方法可以设置允许Session保持不活动状态的时间(以秒为单位),如果超过这一时间,Session就会失效。

    Session的持久化

    把HttpSession对象保存到文件系统或数据库中的方法,采用了Java语言提供的对象序列化技术。如果把HttpSession对象从文件系统或数据库中恢复到内存中,则采用了Java语言提供的对象反序列化技术。

    Session持久化的好处:

    (1)降低内存资源的消耗,提高对内存资源的利用率。

    (2)当Web服务器因故障而终止时,可以从文件系统或数据库中恢复Session数据。

    Session的持久化是由Session Manager来管理的。Tomcat提供了两个实现类:

  •     org.apache.catalina.session.StandardManager
  •     org.apache.catalina.session.PersistentManager

    1. StandardManager

    StandardManager是默认的Session Manager。其实现机制为:当Tomcat关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化,把它们保存到文件系统中,默认的文件为:

   <CATALINA_HOME>/work/Catalina/hostname/applicationname/SESSION.ser

    2. PersistentManager

    PersistentManager能够把Session对象保存到Session Store中,它提供了比StandardManager更为灵活的Session管理功能,它具有以下功能:

    (1) 当Tomcat关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化,把它们保存到Session Store中。

    (2)具有容错功能,及时把Session备份到Session Store中,当Tomcat意外关闭后再重启时,可以从Session Store中恢复为Session对象。

    (3)可以灵活控制在内存中的Session数目,将部分Session转移到Session Store中。

     Tomcat实现持久化Session Store的接口为org.apache.Catalina.Store,目前提供了两个实现这一个接口的类:org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。

转载于:https://www.cnblogs.com/zhujunhuawoaini/p/3381580.html

相关文章:

  • 基于Spring可扩展Schema提供自定义配置支持
  • oracle创建job方法
  • java.util.Date转java.sql.Date, 以及区别
  • 记住的小知识点
  • GIServer 2.1 发布,增加新工具,修正中文问题
  • Linux命令全称
  • MyEclipse里面怎样避免光标乱跳
  • ILNumerics项目的应用之线性方程
  • 怎样防止jdk出现版本不一致而导致控制台或Tomcat的出错?
  • Novikoff定理
  • 面试,我薪水要低了——Leo网上答疑45
  • POJ 3253 Fence Repair 优先队列
  • 死机后ie不能执行脚本
  • 解决浮动元素不在一行
  • oracle性能学习中总结
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017年终总结、随想
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • git 常用命令
  • JavaScript 一些 DOM 的知识点
  • JavaScript设计模式系列一:工厂模式
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • underscore源码剖析之整体架构
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 基于Android乐音识别(2)
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 数组的操作
  • 微信小程序实战练习(仿五洲到家微信版)
  • 鱼骨图 - 如何绘制?
  • 原生 js 实现移动端 Touch 滑动反弹
  • #Z0458. 树的中心2
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (+4)2.2UML建模图
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十八)SpringBoot之发送QQ邮件
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)linux 命令大全
  • (转)创业的注意事项
  • (转载)虚函数剖析
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .htaccess配置重写url引擎
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [HarmonyOS]第一课:从简单的页面开始
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页