首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

应用会话和会话持久性 Weblogic session

2012-11-18 
使用会话和会话持久性Weblogic session?Downloads?|?Product Documentation?|?Support? ? ?? ? ?“协议” HT

使用会话和会话持久性 Weblogic session

?

Downloads ?|? Product Documentation ?|? Support 应用会话和会话持久性     Weblogic session? 应用会话和会话持久性     Weblogic session? 应用会话和会话持久性     Weblogic session? 应用会话和会话持久性     Weblogic session? ? ?

应用会话和会话持久性     Weblogic session

“协议” HTTP“高级选项”使用管理控制台。

要添加或覆盖已命名的特性,请使用 setAttribute() 方法。要一起删除已命名的特性,请使用 removeAttribute() 方法。

注意:您可以添加 Object 的任意 Java 子项作为会话特性,并将一个名称与其关联。但是,如果您使用的是会话持久性,您的特性 value 对象必须实现 java.io.Serializable

退出和结束会话

如果您的应用程序处理的信息比较敏感,请考虑提供退出会话的功能。在使用购物车和 Internet 电子邮件帐户时,这是一个常用功能。当同一浏览器返回服务时,用户必须登录回系统。

针对单个 Web 应用程序使用 session.invalidate()

用户身份验证信息既存储于用户会话数据中,也存储于 Web 应用程序所定位的服务器或虚拟主机的上下文中。通常用于使用户退出的 session.invalidate() 方法仅使用户的当前会话失效,用户身份验证信息仍有效,且存储于服务器或虚拟主机的上下文中。而如果服务器或虚拟主机仅承载一个 Web 应用程序,则 session.invalidate()方法实际上会使用户退出。

在调用 session.invalidate() 之后,不要引用无效的会话。如果引用,则将引发 IllegalStateException。下次用户从同一个浏览器访问您的 servlet 时,会话数据将丢失,调用 getSession(true) 方法时候将创建新会话。此时,您可以再次将用户发送至登录页面。

针对多个应用程序实现单一登录

如果服务器或虚拟主机是多个 Web 应用程序的目标,需要采用其他方式使用户退出所有 Web 应用程序。由于 Servlet 规范不提供用户退出所有 Web 应用程序的 API,因此提供以下方法。

weblogic.servlet.security.ServletAuthentication.logout() 从用户的会话数据中删除身份验证数据,这将使用户退出,但仍允许会话保持活动。

weblogic.servlet.security.ServletAuthentication.invalidateAll() 使所有会话无效,删除当前用户的身份验证数据。同时使 cookie 无效。

weblogic.servlet.security.ServletAuthentication.killCookie() 对 cookie 进行设置,使其在响应发送至浏览器后立即过期,从而使当前 cookie 无效。此方法依赖于响应成功到达用户浏览器。会话将保持活动,直至超时为止。

避免 Web 应用程序的单一登录

如果您不希望某 Web 应用程序参与单一登录,请为该 Web 应用程序定义另外一个 cookie 名称。有关详细信息,请参阅配置 WebLogic Server 会话 Cookie。

配置会话跟踪

WebLogic Server 提供多种可配置的特性,它们将确定 WebLogic Server 如何处理会话跟踪。有关配置这些会话跟踪特性的详细信息,请参阅 session-descriptor。

使用 URL 重写替代 Cookie

在某些情况下,浏览器可能不接受 cookie,这表明无法通过 cookie 跟踪会话。对于这种情况,URL 重写是一个解决方法,当 WebLogic Server 检测到浏览器不接受 cookie 时,会自动替换为 URL 重写。URL 重写包括将会话 ID 编码到 servlet 传回浏览器的那些网页的超链接中。当用户随后单击这些链接时,WebLogic Server 将从该 URL 中提取 ID,并查找相应的 HttpSession。然后可以使用 getSession() 方法访问会话数据。

要在 WebLogic Server 中启用 URL 重写功能,请在 WebLogic Server 特定的部署描述符 weblogic.xml 中的 session-descriptor 元素中,将 URL-rewriting-enabled 参数设置为 true。请参阅 url-rewriting-enabled。

为确保您的代码能够正确处理 URL 以支持 URL 重写功能,请考虑下列准则:

应避免直接向输出流中写入 URL,如以下所示:
out.println("<a href="/myshop/catalog.jsp">catalog</a>");

而使用 HttpServletResponse.encodeURL() 方法。例如:

out.println("<a href=""     + response.encodeURL("myshop/catalog.jsp")      + "">catalog</a>");
调用 encodeURL() 方法确定 URL 是否需要重写,如果需要,则通过在 URL 中包含会话 ID 重写该 URL。 对发送重定向的 URL 以及作为响应而返回至 WebLogic Server 的 URL 进行编码。例如:
if (session.isNew())??response.sendRedirect (response.encodeRedirectUrl(welcomeURL));  

新建会话时,即使浏览器接受 cookie,WebLogic Server 也将使用 URL 重写功能,因为在初次访问会话时,服务器无法确定浏览器是否接受 cookie。

通过检查 HttpServletRequest.isRequestedSessionIdFromCookie() 方法返回的 Boolean,servlet 可以确定给定会话是否是从 cookie 中返回的。您的应用程序可能会相应响应,或仅依赖于 WebLogic Server 的 URL 重写。

注意:CISCO 本地定向器负载均衡器要求 URL 重写中使用问号“?”分隔符。由于 W