簡體   English   中英

如何在Java EE中管理會話?

[英]How can I manage sessions in Java EE?

在我的Java EE應用程序中,我遇到了會話問題。 不同的用戶可以登錄到該應用程序,指定的用戶可以看到他被授權的數據。 他不應該看到其他用戶數據。 為了區分用戶,我們使用Client_ID 一旦用戶登錄,我們就從數據庫中獲取此Client_ID並將其設置為會話,如下所示:

session.setAttribute("Client_ID",user.getClient_ID())

我們在整個應用程序中訪問此會話值並將相關數據提取到該Client_ID 當用戶在單個瀏覽器上工作時,這可以正常工作,但問題是:

假設有一個SuperAdmin,他需要查看他下的所有客戶。 SuperAdmin以client_1身份登錄,再次以client_2身份登錄。 SuperAdmin使用相同的瀏覽器記錄了這兩次。 當我刷新client_1瀏覽器時,我看到了client_2詳細信息,這不應該發生。

我認為我們的應用程序在同一瀏覽器中使用相同的會話進行兩次不同的登錄。 這個問題會解決什么問題? 刷新頁面時,我應該看到特定客戶端的正確數據。

不要使用cookie來存儲會話ID,而是使用請求參數。 因此每個打開的選項卡都會請求自己的會話。 使用cookie,瀏覽器中的所有選項卡只有一個cookie。

PS:我認為在同一時刻在一個瀏覽器中登錄2個或更多用戶是不正確的。 您的應用程序應該檢測到client_1已經對其進行了簽名,並且在注銷之前還可以從同一瀏覽器中為其他用戶登錄。 例如,Google的應用程序就是這樣運作的。 如果SuperAdmin具有在不登錄的情況下查看client_1或client_2數據的功能,也會很棒。這將使他/她不會記住幾十個密碼並且會提高工作效率(時間是金錢,不是嗎?)。

如果您希望同一瀏覽器實例中的多個選項卡看到不同的內容,那么您將不得不重新設置會話管理並從URL中刪除關鍵內容。

會話在瀏覽器選項卡之間共享(對於大多數瀏覽器都是如此),因此使用一個選項卡登錄將影響其他選項卡的會話。

解決方案是使用角色而不是多次登錄。 您將為client_1提供SuperAdmin角色,而客戶端2則不提供。 這將減少登錄兩次的需要。

但無論如何,您應該只允許一個用戶一次登錄。 登錄過程應使前一個會話無效。 我忘記了Java EE中的確切代碼,但它類似於session.invalidate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM