我在Jetty上有一个GWT应用程序。配置不同的访问端口等后,用户可以在同一台服务器上多次启动该应用(例如2次)。我们注意到,当从同一个浏览器访问这两个不同的实例时,它们会干涉每个实例,例如,将其他会话踢出。同一服务器上不同的GWT应用程序runnnig在相同的浏览器上互相干扰
如果从不同的浏览器访问,例如ie和firefox或chrome,则没有问题。
当然,如果两个应用程序从不同的服务器上运行,没有问题。
有没有人看到过相同的行为?如何解决这个问题?
我在Jetty上有一个GWT应用程序。配置不同的访问端口等后,用户可以在同一台服务器上多次启动该应用(例如2次)。我们注意到,当从同一个浏览器访问这两个不同的实例时,它们会干涉每个实例,例如,将其他会话踢出。同一服务器上不同的GWT应用程序runnnig在相同的浏览器上互相干扰
如果从不同的浏览器访问,例如ie和firefox或chrome,则没有问题。
当然,如果两个应用程序从不同的服务器上运行,没有问题。
有没有人看到过相同的行为?如何解决这个问题?
如果您的服务器使用cookie来维护会话,并且两个浏览器实例共享相同的一组cookie,那么当第二个cookie登录时,它必须踢出第一个 - 同一个cookie如何具有多个值?
选项尝试:
如果他们访问同一个cookie,他们应该有两个会话正常工作 - 即您提到的第二个选项应该工作。 –
没错,但显然这不起作用,否则我们不会读这个问题;)。 –
每个不同的登录信息都有不同的会话信息。从浏览器的角度来看,它使用cookie来跟踪名为“JSESSIONID”的会话,第二次登录会清除第一个cookie。第二和第三都不适用于我们,无论谁登录,浏览器总是获得相同的cookie名称“JSESSIONID”,并且它总是从任何人和任何人身上抹去以前的内容。我不知道是否有一些解决方法。 – huican
JSESSIONID用于防止跨站点请求伪造攻击。检查你如何设置这个cookie。通常情况下,你会设置这样的:
<script type="text/javascript">
var info = "<%=XsrfTokenUtil.getToken(request.getSession().getId()) %>";
</script>
如果你这样做,你应该得到每个浏览器窗口同样的道理(值),只要你有一个会话。试着找出为什么你每次都设定一个新值。
另外,如果你需要有多个窗口的能力,可以允许重复饼干XsrfTokenUtil:
final Cookie sessionCookie = getCookie(cookies, "JSESSIONID", false);
替换真假允许重复的饼干。
对于
你是什么意思“踢出其他会议”? –
当user1登录到第一个实例时,在user2登录到第二个实例后,user1会话将被注销到登录页面。我刚刚发现我的问题几乎与http://stackoverflow.com/questions/19566072/multiple-instance-of-a-gwt-application-runing-on-the-same-server-on-different-to – huican
你使用什么认证?一个会话不会杀死其他会话,除非您在代码中的某个地方执行该操作。 –