由于HttpSession对象都要占用一定的内存空间,如果在某一时间段内,访问站点的用户很多,Web服务器内存中将会因此积累大量的HttpSession对象,消耗大量的服务器内存资源,即使用户已经离开或者关闭了浏览器,Web服务器也并不知道,还要保留与之对应的HttpSession对象,尽管最后可以通过超时限制来释放HttpSession对象,但是在超时之前,这些HttpSession对象仍然占用内存资源。
为了提高服务器内存资源的利用率,Web服务器通常将那些暂时不活动但未超时的HttpSession对象转移到文件系统或数据库中保存,一旦服务器需要使用它们时,再将它们从文件系统或数据库中装载进内存,这种技术称为HttpSession的持久化。
注:存储在HttpSession对象中的每个属性对象必须是可序列化的,即必须是实现了Serializable接口的对象。
作用:
1. 既可以提高服务器内存资源的利用率,又可以保证那些暂停活动的客户端在会话超时前继续原来的会话;
2. 在多台服务器协同对外提供服务的集群系统中,借助Session的持久化技术,某台服务器可以将其中发生了改变的Session对象复制给其他的服务器,否则,集群系统就必须保证来自同一用户的请求总是被定向到处理该用户的第一次访问请求的服务器,并且因为其他服务器距离不存在某个服务器的Session信息,在某个服务器停止工作后无法启动其他服务器来接替它与客户端的会话;
3. 在一个Web应用程序关闭后接着重新启动时,服务器也会持久化该应用程序内存中的所有HttpSession对象,即在Web应用程序关闭时将所有HttpSession对象保存到文件系统或数据库中。如果客户端在Web应用程序重新启动后要求继续原来的会话,服务器再将客户端对应的HttpSession对象从文件系统或数据库中装载进内存。