2009-08-19 79 views
1

我在处理会话不方便的问题..的处理JSP会话

我有这样的:

www.mydomain.com
sub1.mydomain.com
sub2.mydomain。 COM
sub3.mydomain.com

,当我登录到“WWW”,然后我更改为“SUB2”(比如)我 弄清楚它创建另一个会话:S 这是为什么?

我需要WWW,SUB1,SUB2,SUB3相同的会话,等等。所有在 “mydomain.com” ..

我能做些什么?是这样的,我必须做个诡计?或者是 那里有我想要的“合法”解决方案?

回答

4

的JSESSIONID的cookie由容器发行,以及Cookie域和路径始终是Web应用程序的域和上下文根。

看起来好像您有多个应用程序,在这种情况下,由一个应用程序发出的JSESSIONID不会被另一个应用程序识别,因为域或上下文根的变化,即使应用程序在相同容器。

有多种方式来解决这个问题:

  • 如果你不处理具有高价值的应用程序,如果你能保证没有“流氓”的应用程序将在服务器上进行部署,你可以配置服务器以跨应用程序共享会话。 Weblogic Server可以配置为执行此操作。
  • 使用中央认证和会话管理提供程序 - SSO。
  • 使用TLS/SSL - 大多数服务器在通信通过SSL时不会发出JSESSIONID cookie,而是使用SSL本身来存储状态。这里你会有不同的结果。

更新

Glassfish的第三版允许您设置会话cookie域。这是通过session-config element in sun-web.xml完成的。我不确定这是否可用于v2或更低版本的Glassfish。

+0

好吧,一切都只是一个应用程序,它只是我使用的子域名为用户“跳过”选择一个城市..它就像:www.mywebsite.com //这将是一般网站.. chicago.mywebsite.com //它是芝加哥选定的城市.. miami.mywebsite.com //它是迈阿密的选定城市.. 在“www”用户可以选择城市,并且他们被重定向到那个子域..但里面我只是评估子域,我做“相同”的事情,如果将有一个组合框选择当前的城市.. 这是一个坏习惯? – 2009-08-20 15:28:22

+0

我不认为这是一个不好的做法;这纯粹是一个主观主题。你可以看看更新后的答案。 – 2009-08-20 20:30:13

+0

非常感谢你..我在sun-web.xml的session-config中做了这个, ..我用GlassFish v3和v2它完美的工作..再次..谢谢你... – 2009-08-20 22:36:38

1

是的,它是这样的,因为你将为每个不同的域有单独的会话cookie。你使用哪个Web服务器?您可以实施与SSO相关的解决方案以跨域共享数据。

+0

我使用的GlassFish ...和SSO,一点都没有,因为一切是相同的应用程序..同一Web服务器内连相同的上下文路径....是的,我让jsp打印sessionId,它是相同的“index.jsp”,但具有不同的子域名(只是名称,因为所有地址都是相同的IP),并且它显示不同的ID .. .. – 2009-08-20 15:31:33