2010-09-18 192 views
0

自從共享相同會話以來,我們在使用多個選項卡時遇到了一個問題。任何替代方案?當有人使用標籤或CTRL + N時,我們可以創建一個獨特的會話嗎?會話共享問題

這是一個Java EE/Struts2企業應用程序,如果這很重要。

回答

0

沒有簡單的方法來實現我所知道的。

解決此問題的常用方法是更改​​應用程序,以便它可以使用多個選項卡(如果可能)處理用戶。

對於如何在用戶按下Ctrl + N的同時按下多步表單來「禁用」舊窗口,有幾種解決方法,但您必須提供更詳細的信息。

0

通常,爲了進行會話跟蹤,瀏覽器實例被視爲單個用戶/實體。特別是如果您使用Cookie來跟蹤會話。我不確定我喜歡允許不同標籤進行不同會話的想法。對於基於Web的應用程序來說,這感覺很不直觀。當然,所有的恕我直言。

這就是說,如果你想改變這一點,你將不得不提出一個自定義的實現。也許你可以爲不同的標籤生成不同的會話ID並附加到URL。從來沒有嘗試過這個,所以不知道它會多麼容易或困難。

1

這是所有以服務器爲中心的Web應用程序面臨的問題,它不是特定於Java EE的。問題是大多數瀏覽器都是以每個用戶爲基礎存儲cookie,而不是每個選項卡。此外,這種行爲通常對用戶不透明,增加了混淆。我能想到的一些解決方案(雖然它們都不是真的令人滿意):

  • 將應用程序託管在多個URI下。這樣,任何瀏覽器都將獨立存儲cookie,因此,每個應用程序版本都有一個會話。
  • 通過不同的機制傳播會話ID,例如,通過URI。然而,這有一些注意事項 - 它向用戶公開會話ID,它使用醜陋的URI,並且當用戶複製粘貼或書籤當前URI時形成安全風險(會話劫持等)(因爲它們然後將會話ID存儲在鏈接中)。
  • 通過頁面內隱藏的字段傳播會話ID。此解決方案可能需要您重寫部分內置會話處理,並且當您的頁面包含指向應用程序中其他頁面的鏈接時,會丟失會話ID。
  • 對於Firefox,有一個名爲「cookie pie」的插件,它允許用戶爲部分或全部選項卡提供獨立的Cookie存儲。缺點是用戶必須主動啓用它,解決標籤問題成爲用戶的責任。此外,它在任何情況下都不起作用(例如,無論Google發現您的活動登錄是什麼)。
  • 避免使用會話狀態,並使用其他機制來保持請求之間的狀態。就像通過隱藏字段傳遞會話ID一樣,這在某些情況下會中斷。
  • 使應用程序完全以客戶端爲中心,即在javascript中編寫整個接口並通過ajax調用與服務器進行通信。這樣,你就不會依賴於瀏覽器的cookie實現。儘管您的應用程序基本上已經可以工作,但您仍然必須重寫大量的代碼。