但是当某人试图使用相同的应用程序一次做两件不同的事情时,会话共享可能是致命的,例如就像有人想要一次预订一张前瞻性旅程机票和一张往返机票,那时候他会预订2张相同的机票。
可行的解决方案
在创建新窗口而不是通过单击图标或Ctrl + N创建时,我们应该使用File - >新会议;它不会发生。
您可以在客户端PC上进行注册表更改 - 添加以下内容。
[HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main]
“TabProcGrowth”= dword:00000000
将禁用“Loosely couple IE8”; IE8然后作为以前版本的IE工作。
iexplore.exe -nomerge
运行MSIE将禁用“Loosely Couple IE8”; IE8然后作为IE的早期版本工作。但是我将如何以编程方式进行呢?
你知道,我的问题不是我的申请。如果我登录一个用户,它工作正常,但是当我通过不同用户从IE8浏览器的不同实例登录多个用户时,我以后的会话数据覆盖了前者,这是因为两个IE浏览器都使用相同的会话ID。这是因为IE8的会话共享。对于一个应用程序只维护了一个会话,但是我登录了多少用户。实际上我想要保持每个用户的会话。
就像我在一个浏览器中登录Gmail时一样。如果我只是在另一个浏览器上键入Gmail。它正在自动登录。我不希望这个在我的申请中。我应该在我应该执行独立操作时由另一个用户登录。
我的应用程序使用Struts,Spring,Hibernate& JBoss应用程序服务器。
现在告诉我应该怎么做?
答案 0 :(得分:2)
我认为您在上面描述的问题可以在所有浏览器上复制,并且可以更好地解决服务器端问题。我所知道的一种方法是创建会话ID并使用状态机管理对话的生命周期。
这允许您(和您的用户)拥有一个可以在多个会话中进行多次会话的会话,这在实践中发生了很多,至少在内部企业应用程序中是这样。这个世界比业务流程模型所展示的更加混乱。
答案 1 :(得分:0)
尝试在客户端维护会话ID。例如,在JSP级别。然后将其发送回服务器组件并尝试跟踪它。假设当前在服务器端收到的会话正在进行中,然后通过同步或类似的等待机制保持一段时间。我希望这种会议问题应该得到解决。
答案 2 :(得分:0)
您最好的选择可能是使用支持多个并发会话的Web框架(称为会话或流程的somtimes),或者只是避免使用会话这么多并转到REST。如果您需要在客户端上破解它,您将无法通过您的webapp执行此操作,但是自定义获胜程序或.reg文件可以执行此操作。这也意味着使用其他操作系统和浏览器的用户仍会遇到同样的问题。
答案 3 :(得分:0)
我不喜欢提供的其他解决方案。我唯一想要的是提供一个用户可以点击的URL,它会获得一个新的会话登录。 有一个明确的sessionAuthentication函数,但不一个openLinkInNewSessionWindow
解决IE8浏览器的问题,您可以在“多次登录”页面上提供链接,并使用浏览器中的丑陋WScript。一个例子:
<html>
<head>
<script>
function openNewSessionIE8NoMerge() {
// This opens a new session window for windows with IE8, unfortually there is a Active X security warning.
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("iexplore.exe -nomerge www.gmail.com?testNewSession");
}
</script>
</head>
<a href="#" onclick="javascript:openNewSessionIE8NoMerge();">Click here for a new session IE8 (multiple sessions on the same application)</a>
</html>
测试: 将示例保存在sampleNewSession.html中,用IE8打开文件,在新的选项卡中登录gmail,按下sampleNewSession中的链接。现在有一个新窗口,但没有登录。
这将有助于用户,它只需点击一个链接即可。唯一的问题是activeX安全消息。