1

我们正在构建一个 Web 应用程序来服务多个区域网站 TLD。此外,Web 应用程序还支持数以千计的动态子域。示例包括:

www.example.com
www.example.co.uk
www.example.com.ar
fred123.example.co.uk  <== Thousands of this form
fred123.p.example.us   <== Thousands of this form

虽然我们可以理解不同的域 TLD 会导致新会话,但上述后两个示例开始出现问题,这也会导致新会话实例。例如,如果用户:

  1. 转到:www.example.co.uk 创建一个新会话,然后...
  2. 点击链接:fred123.example.co.uk 创建一个新会话,然后...
  3. 点击一个链接:sam99.example.co.uk 一个新的会话被创建...

3 次点击 ==>> 3 次会议!!!!

问题似乎是由于 GlassFish v3 自动将 JSESSIONID 的域设置为主机请求的 FQDN。

需要的是至少将主机名部分从域值中剥离,以具有如下域值:

.example.com
.example.co.uk
.example.com.ar
.example.co.uk  <== Thousands of this form
.p.example.us   <== Thousands of this form

有谁知道如何实现这一点。我发现了以下问答,但在我们的案例中,子域 TLD 并不完全匹配:

处理 JSP 会话的问题

因此,静态配置 sun-web.xml 或使用 Servlet 3.0 解决方案的解决方案似乎没有帮助。此外,创建过滤器响应包装器也不起作用,因为 JSESSIONID cookie 是在应用程序服务器的较低级别分配的,并且不会暴露给 Web 应用程序以进行拦截。

我认为我仅有的另外两个选择是:

a) 修补将 JSESSIONID cookie 域值设置为 FQDN 的 GlassFish v3 代码,以便发生一些剥离或

b) 在 Sun Web Server 7.0 反向代理层中做一些事情,我们必须重写 set-cookie 标头中返回的 JSESSIONID cookie 域值,但是我无法找到有关如何执行此操作的示例

任何人都可以帮助解决这个问题吗?任何线索/帮助将不胜感激!

4

1 回答 1

0

使用 Apache 和 mod_headers 重写 cookie? 使用 Tomcat 允许子域会话 cookie 的最佳方式

于 2010-07-10T21:44:26.907 回答