即使Jsession保持相同的第二次访问,也不会保留会话值

时间:2015-07-13 14:30:44

标签: servlets cookies internet-explorer-9 frames siteminder

更新:在对第二部分中列出的原始问题进行分析后,我发现问题可能是由于304响应,下面是详细说明。

我开发了一个Web应用程序,用户点击链接并将其带到servlet,我在其中设置了几个会话变量,然后将其转发给jsp。第一次当我访问应用程序时,关闭浏览器然后打开浏览器并访问应用程序后工作正常我在jsp中得到空指针异常,因为它试图访问会话数据,因为我得到了对servlet的304响应,所以这意味着那个servlet没有被调用,我的jsp被调用了?由于未调用servlet,因此未设置会话值。

我的理解是否正确?

我只在IE9中观察这个

---------------------我原来的问题是--------

我们已在我们的应用程序中集成了Siteminder,我观察到为不同的域创建了siteminder cookie SM会话,因为我的应用程序特定的cookie是为正确的域创建的。

对于每个请求,我都看到了新的smsession值,但我的应用程序cookie保持不变,即使cookie保持不变,我使用servlet在会话中设置的值在我的jsp中也不可用。

我打印了jsession id,所有请求的jsession id都相同。

以下是流程。

用户点击URL siteminder拦截它并在用户成功登录后请求凭据他被重定向到servlet,我在Session中设置了几个值,然后我将控件发送到index.html,它有两个帧。我正在为这些帧加载两个jsp,在这些jsps中我试图访问我无法获得的会话值。

我只在IE9中观察到此行为,但IE8行为正常, 第一次访问工作正常第二次不在IE9

如果smsesson的更改导致http应用程序对java app的更改,有人可以告诉我吗?我不这么认为Jsession id仍然是一样的。

可能的原因是什么。

1 个答案:

答案 0 :(得分:1)

您是否检查过在帧中调用的jsps是否与servlet中的jsps具有相同的会话ID?

为您提供有关SMSESSION和JSESSION的背景资料: -

SMESSION id cookie会定期被Web代理更改,并且通常会标记到基本域。示例 - 如果应用程序托管在a.b.com上 - JSession ID通常将设置为域a.b.com,而SMSESSION将设置为b.com域。这是默认的Siteminder行为,因为它假定b.com域中的所有应用程序都需要用于SSO的cookie。您可以使用代理的ACO通过显式设置域名或设置需要使用的域的范围来更改此设置。 除非您的应用程序具有依赖于SMSESSION id的值并修改java会话的逻辑,否则JSessionID cookie不会受到SMSESSION值的更改影响