|
|
Sun Java System Application Server 7 Web应用开发者指南 创建和管理用户会话 本模块介绍了如何创建和管理会话,使得用户和事务信息之间的交互具有持续性。 该模块包含以下各节: 用户会话一词指的是服务器跟踪的一系列用户应用交互。一般主要用会话来维护许多交互过程中的用户特定信息,包括持久性对象(如EJB组件句柄或数据库结果集)和认证过的用户标识。例如,可以使用会话来跟踪一个合法的用户登录以及该特定用户登录后的一系列有向活动。 会话本身是保存在服务器上的。每次申请会话时,客户端发送cookie中的会话ID,如果浏览器不允许使用cookie,服务器会自动将会话ID 写入URL。 Sun Java System Application Server 支持servlet标准会话接口,即HttpSession,对于所有的会话活动都可以使用该接口。你能够利用该接口编写简短、安全的servlet。 会话和Cookiecookie是一个较小的信息集合,可以将它传送给调用它的浏览器,浏览器在后面的每次调用中都会检索它,这样服务器能够识别出这些调用是不是来自于同一个客户端。每次调用之后,cookie都会返回到创建它的站点上。 会话是由第一次创建的时候发送到客户端的会话cookie自动维护的。会话cookie包括会话ID,通过该ID识别每次客户端到服务器的连续交互。如果客户端不支持或允许cookie,服务器重写URL,会话ID出现在该客户端的URL上。 你可以配置会话是否要使用cookie以及如和使用。查看sun-web.xml文件中的session-properties和cookie-properties元素,具体介绍见"装配和部署Web组件"。 会话和URL重写在两种情况下Sun Java System Application Server 插件将使用隐式URL重写:
你可以配置会话要不要使用URL重写。查看sun-web.xml文件中的session-properties元素,具体介绍见 "装配和部署Web组件" 会话和安全Sun Java System Application Server 安全模型基于一个认证的用户会话。 一旦创建了会话,认证应用用户 (如果使用了认证) 并且将信息登记到会话中。每个接收EJB请求的servlet在交互阶段完成两件事情:产生JSP的内容并格式化输出,并且检查用户认证是否正确。 另外,可以规定会话cookie只能在安全连接中传递(即HTTP),所以会话只能在安全通道中才处于活动状态。 如何使用会话要使用会话,首先要使用HttpServletRequest 的方法getSession()创建一个会话。建立会话之后,使用给定的方法查看和设置它的属性。如果需要,还可以设置会话,让它在处于非活动状态一个预定义的时间后自动超时,也可以手动使它无效。也可以将对象和存储它们供其它组件使用的会话绑定起来。 创建或访问会话使用HttpServletRequest 的方法getSession()创建新的会话或访问现有会话,如下所示: HttpSession mySession = request.getSession(); getSession() 返回请求的有效的会话对象,通过封装在请求对象中的会话cookie来识别。如果不存在跟请求相关的会话,那么不带任何参数调用该方法就会创建一个会话。另外,调用带有布尔参数的该方法时,只有当该参数是true时才创建会话。 下面的例子显示了servlet的doPost() 方法,如果会话存在,该方法仅执行servlet的主函数。注意,如果会话不存在,getSession() 的false 参数禁止创建新会话。 public void doPost (HttpServletRequest
req,
如果想获得getSession()的相关信息,请查看Java Servlet Specification v2.3。 检查会话属性一旦建立了会话ID,使用HttpSession 接口中的方法检查会话属性,使用HttpServletRequest 接口中的方法检查会话相关的请求属性。 下面的表格显示了检查会话属性的方法。左列是HttpSession 方法,右列是对这些方法的描述。 HttpSession 方法
例如: String mySessionID = mySession.getId();
下面的表格显示了检查servlet请求属性的方法。左列是HttpServletRequest 方法,右列是对这些方法的描述。 HttpServletRequest 方法
例如: if ( request.isRequestedSessionIdValid()
) { 可以将对象绑定到会话上,这样在多个用户交互中就能使用它们。 下面的表格显示了HttpSession 方法,它们支持将对象绑定到会话对象。左列是HttpSession 方法,右列是对这些方法的描述。 HttpSession 方法
HttpSessionBindingListener 绑定通知某些对象在被加入会话或者被从会话中移除时要求得到通知。这样的信息可以通过让该对象实现HttpSessionBindingListener接口得到。当应用在会话中存储或移除数据时,servlet引擎会检查绑定或解绑的对象有没有实现HttpSessionBindingListener。如果实现了,Sun Java System Application Server 就会通过HttpSessionBindingListener接口通知在考虑范围的对象 ,它跟会话绑定或解绑了。 使会话无效当会话处于非活动状态超过一段时间后,指定会话自动无效。也可以手动使用HttpSession 的方法invalidate()让会话无效。
手动让会话无效,只要调用下面的方法: session.invalidate(); 所有和会话绑定的对象都从会话中移除。 设置会话超时使用sun-web.xml 部署描述符文件设置会话超时。如果想获得更多信息,请查看“装配和部署Web组件”中的 session-properties 元素。 会话管理器开始一个新会话的时候,会话管理器会自动创建新的会话对象。在一些环境中,客户端并不加入会话,例如,会话管理器使用cookie而客户端不接受cookie。 Sun Java System Application Server 7提供了下面这些会话管理选项:
StandardManager 是默认的会话管理器。 启动StandardManager你可能希望指定StandardManager 显式改变它的默认参数。要做到这一点,编辑Web应用的sun-web.xml 文件,如下所示: <sun-web-app> 如果想获得关于sun-web.xml 文件的更多信息,请查看"装配和部署Web组件"。 StandardManager的管理器属性下面的表格描述了StandardManager 会话管理器的manager-properties 属性。左边一列是属性名字,中间一列显示了默认值,右边一列具体描述了属性的作用。 manager-properties属性
PersistentManager PersistentManager 是Sun Java System Application Server 提供的另一个会话管理器。对于持久性会话, PersistentManager 可以使用一个文件,序列化每个会话。你可以创建自己的持久性机制。 启动PersistentManager你可能希望明确地指定PersistentManager, 使它能改变它的默认参数。要实现这一点,编辑Web应用的sun-web.xml 文件。如下面的例子所示。注意必须将persistence-type 设置成file。 <sun-web-app> 如果想获得sun-web.xml文件的更多信息,参见 装配和部署Web组件 PersistentManager的管理器属性 下面的表格描述了PersistentManager 会话管理器的manager-properties 属性。左列是属性名,中间一列是默认值,右边一列描述了属性的作用。 manager-properties属性
PersistentManager的存储属性 下面的表格描述了PersistentManager 会话管理器的store-properties属性。左列是属性名,中间一列是默认值,右边一列描述了属性的作用。 store-properties属性
上一部分 | 目录 | 下一部分 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||