2013-03-20 32 views

回答

0

由于问题没有明确说这之间的会话需要共享的对象,我可以建议以下选项:

1)如果您需要在同一台服务器上共享不同Web应用程序之间的会话(Tomcat)的,您可以使用:

<Host name="localhost" ...> 
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
</Host> 

2)如果服务器不是tomcat,请参考相应服务器的SSO选项。 3)您也可以使用完全成熟的SSO产品,如CAS(http://www.jasig.org/cas),这将允许您跨应用程序在不同服务器之间但不在用户之间共享会话。 4)如果你需要在不同的用户之间共享会话,你需要做的就是根据你的共享标准在不同的客户端(通常是浏览器)之间传递会话ID,比如玩同一个游戏的人,访问同一个公告板并可以协作地改变数据。但是,请理解大部分安全基础结构是围绕会话ID映射构建的。如果您选择在多个用户之间显式访问会话ID,则必须自己重新创建大量安全筛选器。

5)或者,最好的方法是以不同于会话的方式管理对象的状态。共享对象的状态可以在多个会话中以更符合标准的安全和可审计的方式共享。

+0

我知道SSO只是避免多次登录到同一个安全领域,它不会共享会话。根据定义,JEE标准指定会话在Web应用程序之间是隔离的,但Websphere具有用于启用会话共享的非标准配置。 – 2013-03-20 22:58:56

0

在Java EE上,您必须查看Servlet规范,对象HttpSession提供用于管理服务器端会话的行为。

http://docs.oracle.com/javaee/5/tutorial/doc/bnagm.html

虽然可以存储在会话中的任何物体,这种做法可能是危险的,因为对象保持会话直到它过期或对象被删除,所以如果你的程序没有管好对象存储在会话中的消息可以消耗到许多堆内存中。

会话的对象在到期时被删除,到期时间在部署描述符web.xml中配置或可由客户端设置。如果您未指定会话过期时间,则默认值为30分钟,这30分钟是从用户最后一次请求开始计算的。

我的建议是,你不会在会话中存储对象,你必须使用对象HttpServletRequest和mehtos的setAttribute和getAttribute作为请求之间的传递对象。我需要在会话中存储价值,您可以存储产品的ID而不是整个产品。会话的一个常见用途是存储变量,它们必须超出请求才能存活,并且出于安全原因,您不希望将其存储在cock中。

+0

感谢您的回复,但似乎你的答案不是我的问题的答案,你只是添加一些关于使用会话的评论/实践,我想。 – 2013-03-20 06:09:35

+0

你能对你的问题更具体吗? – 2013-03-20 06:29:02