在java web领域关于会话的保存,不是在客户端保存用户的会话状态就是在服务端保存会话状态的信息。上一篇讲述了关于在客户端保存各种策略,现在讲一下在服务端保存用户会话策略的必须考虑的问题。
当会话状态由服务管理器时,通过一个会话ID来获取状态,状态通常都爱服务器端持久保存除非发生以下情况中一种。
(1)超过了指定的会话超时时间
(2)人工指定会话无效
(3) 一个状态从会话中被删除。
特殊情况:如果服务器关机了,一些在内存中的进行的会话管理的机制可能就没法回复原来的会话数据。
优点: 当数据量比较大时,就可以在服务器保存会话状态,状态保存在服务器上,可以不受在客户端使用时的问题数据量大小和数据类型的限制了,而且也可以避免在客户端的安全问题的,会话就不会再每一个请求中都通过网络传输一次,系统性能不会受太大的影响。
在服务器保存会话信息必须考虑的问题:
服务端:必须按照需求和代价,在繁简之间灵活选择,同时也能兼顾可扩展性和性能问题。
(1)如果保存在服务器上,就必须选择怎样让运行的这个系统的所有服务器都能过取到会话状态。
解决方案:采用多台硬件服务器的实现负载均衡时,软件系统就要以集群方式运行,所以就要在这个集群的多个服务器之间复制会话状态。
现在好多应用服务器产品提供各种各样的现成的解决方案。例如:当负载管理软件时,在同一台服务其上处理同一个用户会话请求。
(2)把会话状态保存到业务层或者资源层的方法:可以使用EJB组建在业务层保存会话状态,在资源层,关系型数据库库也可以用于保存会话状态。