2014-02-17 61 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?