【问题标题】:Session values are not retained even though Jsession remain same second time access即使 Jsession 保持相同的第二次访问,会话值也不会保留
【发布时间】:2015-07-13 14:30:43
【问题描述】:

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

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

我的理解正确吗?

我只在 IE9 中观察到这一点

---------我原来的问题在下面--------

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

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

我已经打印了jsession idjsession id 对于所有请求都是相同的。

下面是流程。

用户点击一个 URL,站点管理员拦截它并在用户成功登录后要求提供凭据,他被重定向到 servlet,我在 Session 中设置了一些值,然后我将控件发送到具有两个框架的 index.html。我正在为这些框架加载两个 jsp,在这些 jsp 中我试图访问我无法获取的会话值。

我只在 IE9 中观察到这种行为,但 IE8 行为正确, 第一次访问正常,第二次在 IE9 中不行

如果 smsesson 的变化会导致 java 应用程序的 httpsession 发生变化,谁能告诉我?我不这么认为,因为 Jsession id 保持不变。

这可能是什么原因。

【问题讨论】:

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


    【解决方案1】:

    您是否检查过框架中调用的 jsps 是否与 servlet 中的会话 id 相同?

    为您提供 SMSESSION 和 JSESSION 的背景知识:-

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

    【讨论】:

    • 是的,谢谢 avi,但是我今天观察到不同的行为,因此我将编辑我的问题
    • cookie 更改是否意味着新会话这仅适用于 siteminder 会话这对 java 会话没有任何影响
    • Sumedha - 如果您收到 304 响应代码,则表示浏览器正在使用页面的缓存版本。您可以尝试两件事: 1. 放置一个打印语句,看看是否每次访问 servlet 时都会打印 2. 在 servlet 响应对象中设置无缓存标头并再次访问.. 您应该总是再次获得 200 响应.请参阅stackoverflow.com/questions/3413036/http-response-caching cookie 更改意味着仅更改 Siteminder 会话而不是应用程序的 java 会话
    • 完美的@avi 我看不到正在打印的 servlet 代码,所以我必须更改我的代码以在我的 servlet 中设置无缓存头并重新测试。
    【解决方案2】:

    进行分析后,我发现导致问题的 servlet 是 304 响应。当第一次访问应用程序时没有问题,但接下来因为当我尝试运行应用程序时会导致问题,因为浏览器会缓存响应,因此服务器将发送 304 响应,因为不会调用此 servlet 并且会话不会设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2019-10-20
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2021-03-27
      • 2019-02-19
      相关资源
      最近更新 更多