我有一个“变量”,用户可以在 JSP/Struts 应用程序中修改该变量,该变量必须在整个 Web 应用程序的会话中保留。他们可能会离开设置和查看该变量的页面(仍然留在应用程序中),并且当他们回来时,他们上次为该变量设置的值应该仍然存在。
显而易见的选择是将其存储为会话属性。这就是我几年前就会做的事情。但 Internet Explorer 8 及更高版本会导致 Web 应用程序用户对打开同一站点的所有浏览器拥有一个会话。换句话说,如果用户在浏览器中打开我的应用程序,然后在另一个浏览器中再次打开它,他们将共享一个会话。我认为他们正在共享代表该会话的 cookie。结果是,如果他们更改一个浏览器会话中的值,那么该值也会在另一个浏览器中更改。
我的用户将在单个工作站上多次运行 Web 应用程序,我需要他们能够在不同的浏览器窗口(甚至选项卡)中为上述变量设置不同的值,并保留不同的值浏览器(或选项卡)的生命周期,但不会影响同一应用程序的任何其他打开的浏览器(或选项卡)。
因此,据我所知,使用会话属性是不可能的。 (有 IE -nomerge 选项,但无法强制用户使用该选项启动 IE)。
我希望我不是第一个处理这个问题的人,并且有人已经优雅地解决了这个问题,并且那个人阅读了这篇文章并做出了回应。
如果不同的选项卡或窗口都发回相同的会话 ID,则服务器无法区分它们。但是,如果您需要这种功能,那么我会考虑将“差异”构建到 URL 中。例如,一个选项卡可能具有 /myapp/xxxxx/,而另一选项卡可能具有 /myapp/yyyyy/。它们可能共享相同的会话,但服务器仍然可以区分它们。 URL 的实际格式并不重要,只要浏览器始终在某处返回神奇部分(例如:xxxxx)即可。在服务器端,您可以根据 sessionid 和发出请求的 URL 跟踪每个会话的多个数字。
唯一需要决定的是您如何注意到新选项卡或窗口已打开,因为您必须分配一个新 URL,但这只是管道。例如,您可能有一个需要设置为匹配 URL 的本地 js 变量,然后当新选项卡打开时,该变量将不匹配,因此您可以转到新的适当 URL 并设置本地变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)