2

我有一个“变量”,用户可以在 JSP/Struts 应用程序中修改它,该变量必须在整个 Web 应用程序的会话中保持不变。他们可能会离开设置和查看它的页面(仍然留在应用程序中),当他们回来时,他们最后为该变量设置的值应该仍然存在。

显而易见的选择是将其存储为会话属性。这就是我几年前会做的事情。但是 Internet Explorer 8 和更高版本会导致 Web 应用程序用户对打开同一站点的所有浏览器进行一个会话。换句话说,如果用户在浏览器中打开我的应用程序,然后在另一个浏览器中再次打开它,他们共享一个会话。我认为他们正在共享代表该会话的 cookie。结果是,如果他们更改了一个浏览器会话中的值,那么该值也将在另一个浏览器中更改。

我的用户将在单个工作站上多次运行 Web 应用程序,我需要他们能够在不同的浏览器窗口(甚至选项卡)中为上述变量设置不同的值,并为此保持不同的值浏览器(或选项卡)的生命周期,但不影响同一应用程序的任何其他打开的浏览器(或选项卡)。

所以,据我所知,使用会话属性是不可能的。(嗯,有 IE -nomerge 选项,但没有办法强制用户使用该选项启动 IE)。

我希望我不是第一个处理这个问题的人,并且有人已经优雅地解决了这个问题,并且那个人阅读了这篇文章并做出了回应。

4

1 回答 1

2

如果它们都发回相同的会话 ID,则服务器无法区分不同的选项卡或窗口。但是,如果您需要这种功能,那么我会考虑将“差异”构建到 URL 中。例如,一个选项卡可能有 /myapp/xxxxx/,而另一个选项卡可能有 /myapp/yyyyy/。它们可能都共享同一个会话,但服务器仍然可以区分它们。只要浏览器总是在某处返回魔术部分(例如:xxxxx),URL 的实际格式并不重要。在服务器端,您可以根据 sessionid 和发出请求的 URL 跟踪每个会话的多个数字。

唯一需要决定的是您如何注意到新选项卡或窗口已打开,因为您必须分配一个新 URL,但这只是管道。例如,您可能有一个需要设置为匹配 URL 的本地 js 变量,然后当新选项卡打开时,此变量将不匹配,因此您可以转到新的适当 URL 并设置本地变量。

于 2012-09-13T19:45:37.177 回答