2024年4月28日发(作者:)

Session的使用

Session是一种用来跟踪用户状态的机制,那它是怎么实现的呢?Servlet容器通过在

客户端浏览器中保存一个Session ID来跟踪Session,调用()可以看到你的

Session ID是多少。如果客户端支持Cookie,就把Session ID作为Cookie保持在浏览

器中,现在绝大多数浏览器都会把Cookie功能打开,但如果用户禁止了Cookie呢?Java

Servlet API中提出了另外一种机制,Servlet容器可以重写客户requst的URL,把Session

ID添加到URL信息中,HttpServletResponse接口提供了这样的方法:public String

encodeURL(String url)-先判断如果没有启用Session,例如jsp中<%@ page

session="false"%>或执行了deate(),那么直接返回url,在判断客户端师

父支持 Cookie,如果不支持,就在url中加入c ID的信息,然后返回修改后的url。

Session的管理

当一个sesson开始时,Servlet容器会创建一个HttpSession对象,在某些情况下把

这些Httpsession对象 从内存中转移到文件系统中或数据库中,需要访问的时候在把它们

载入到内存中来。这样做的好处有两点:节约了内存的消耗,当web服务器产生故障时,

还可以 从文件系统或数据库中恢复Session的数据。

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

 rdManager;

 tentManager。

StandardManager

Standard Manager 是默认的 Session Manager. 它的实现机制为:当 Tomcat 服

务器关闭或重启,或者 web 应用被重新加载时,会对在内存中的 HttpSession 对象进

行持久化,把它们保存到文件系统中,默认的文件为:

/work/Catalina/hostname/applicationname/

PersistentManager

PersistentManager 能够把 Session 对象保存到 Session Store 中,它提供了比

StandardManager 更为灵活的 Session 管理功能,它具有以下功能:

1. 对内存中的 HttpSession 对象进行持久化,把它们保存到 Session Store 中;

2. 具有容错功能,及时把 Session 备份到 Session Store 中,当 Tomcat 服务器意

外关闭后再重启时,可以从 Session Store 中恢复 Session 对象;

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

Tomcat 实现持久Session Store的接口为,目前提供了两

个实现这一接口的类:ore和

ore.

如何配置PersistentManager以及两种持久化Session Store

 配置 FileStore: