Session的体系架构 - 高飞网
271 人阅读

Session的体系架构

2017-07-28 02:09:46

由于http协议属于无状态协议,因此,如果想在一个用户会话中保持用户信息,实现如权限验证,购物车等功能,就需要提供额外的补充机制。在Servlet API中,使用session保持用户会话,下图是java EE为我们提供的session体系:



它的树形图如下:


下面具体介绍各个接口或类的用途说明(粗糙的翻译于源码)


HttpSession 提供了一种鉴定跨越多个请求的或访问一个web站点的用户的方式,并保存下那个用户的信息

servlet容器使用这个接口在HTTP客户端和服务端之间创建一个会话。session会话会保存一段特定的时间,跨越多个连接或来自用户的多个请求,session会话经常会被关联到一个用户上,该用户访问站点多次。服务器可以用多种方式保持一个session,例如cookies或url重写

该接口允许servlet:

1)查看和操作session信息,如sessionId,创建时间、最新访问时间
        2)将对象保存到session中,允许用户信息在多个连接间保持

当一个应用从session中保存或移除一个对象时,session会检查该对象是否实现了HttpSessionBindListener接口。如果实现了,servlet将通知该对象它已经被绑定到对象或从对象中解绑了。通知会在绑定方法完成后发出。对于即将失效或过期的session,通知将在它们失效过期后执行。

当想要在一个分布式容器环境下的多个VM间迁移session,所有session属性要实现HttpSessionActivationListener

servlet需要能够处理一些不支持session的客户端的情况,如故意将cookies禁用。直到客户端加入session,isNew方法都返回true。如果客户端决定不加入到session,getSession会在每次请求都返回一个新的session,同时isNew将总返回true。

Session信息仅在当前web应用(Servlet上下文)中有效,所以一个上下文中的会话信息不能在另一个上下文中直接使用。


Session是Catalina内部为HttpSession提供的一个外观接口(观察模式的应用),用以维持web应用中特定用户每个请求间的状态信息。


StandardSession是Session接口的标准实现。该对象是实现化的,因此它支持持久化存储,或者在不同的VM间传输。


StandardSessionFacade是StandardSession的外观类


ClusterSession 集群Session


Session管理器的结构图




Session存储器的结构图






还没有评论!
54.156.93.60