2014-02-17 124 views
0

我在Jetty上有一个GWT应用程序。配置不同的访问端口等后,用户可以在同一台服务器上多次启动该应用(例如2次)。我们注意到,当从同一个浏览器访问这两个不同的实例时,它们会干涉每个实例,例如,将其他会话踢出。同一服务器上不同的GWT应用程序runnnig在相同的浏览器上互相干扰

如果从不同的浏览器访问,例如ie和firefox或chrome,则没有问题。

当然,如果两个应用程序从不同的服务器上运行,没有问题。

有没有人看到过相同的行为?如何解决这个问题?

+0

你是什么意思“踢出其他会议”? –

+0

当user1登录到第一个实例时,在user2登录到第二个实例后,user1会话将被注销到登录页面。我刚刚发现我的问题几乎与http://stackoverflow.com/questions/19566072/multiple-instance-of-a-gwt-application-runing-on-the-same-server-on-different-to – huican

+0

你使用什么认证?一个会话不会杀死其他会话,除非您在代码中的某个地方执行该操作。 –

回答

1

如果您的服务器使用cookie来维护会话,并且两个浏览器实例共享相同的一组cookie,那么当第二个cookie登录时,它必须踢出第一个 - 同一个cookie如何具有多个值?

选项尝试:

  • 不使用Cookie来跟踪会话
  • 不需要第二个标签/窗口登录,但承认它是已经登录
  • 不支持同一用户一次假装成两个用户
+0

如果他们访问同一个cookie,他们应该有两个会话正常工作 - 即您提到的第二个选项应该工作。 –

+0

没错,但显然这不起作用,否则我们不会读这个问题;)。 –

+0

每个不同的登录信息都有不同的会话信息。从浏览器的角度来看,它使用cookie来跟踪名为“JSESSIONID”的会话,第二次登录会清除第一个cookie。第二和第三都不适用于我们,无论谁登录,浏览器总是获得相同的cookie名称“JSESSIONID”,并且它总是从任何人和任何人身上抹去以前的内容。我不知道是否有一些解决方法。 – huican

0

JSESSIONID用于防止跨站点请求伪造攻击。检查你如何设置这个cookie。通常情况下,你会设置这样的:

<script type="text/javascript"> 
    var info = "<%=XsrfTokenUtil.getToken(request.getSession().getId()) %>"; 
</script> 

如果你这样做,你应该得到每个浏览器窗口同样的道理(值),只要你有一个会话。试着找出为什么你每次都设定一个新值。

另外,如果你需要有多个窗口的能力,可以允许重复饼干XsrfTokenUtil:

final Cookie sessionCookie = getCookie(cookies, "JSESSIONID", false); 

替换真假允许重复的饼干。

+0

对于

  • 11. 相同的字体,相同的Mac上相同的Safari浏览器 - 不同的外观
  • 12. 为什么threadID与我同时在不同浏览器上运行我的应用程序时相同?
  • 13. 相同的程序没有运行在不同的服务器上
  • 14. 如何让两个或多个浏览器标签加载相同的模块而不会相互干扰?
  • 15. 相同的MySQL查询在同一服务器上返回不同的结果
  • 16. 2台服务器上的相同URL
  • 17. SimpleXML与不同服务器上的相同数据的差异
  • 18. Apache Web服务器,在同一服务器上的不同端口上的多个应用程序
  • 19. 浏览器在不同服务器上的...只有某些浏览器
  • 20. 不同服务器上的相同数据库
  • 21. LINQ。不同服务器上的相同数据库
  • 22. 不同SO上的相同SSH服务器密钥
  • 23. 相同的内容不显示在不同的浏览器
  • 24. 相同指令的两个实例相互干扰?
  • 25. 不同的行为在Firefox上,相较于其他浏览器
  • 26. offsetWidth在不同的浏览器中不相同
  • 27. 使用相同的浏览器实例?
  • 28. 相同的Apache服务器
  • 29. 如何让我的网站在不同的浏览器上看起来相同?
  • 30. 在不同的浏览器中加载相同的jsp?