2011-04-12 19 views
0

我們有一個Web應用程序,用戶可以在其中登錄。防止用戶使用不同的瀏覽器(IE和FF)登錄到同一系統

現在我們想要的是,同一個用戶不應該能夠使用不同的瀏覽器登錄。

基本上當前使用兩種不同瀏覽器(IE和FF)的用戶可以同時登錄到同一個帳戶。當您點擊登錄按鈕時,是否可以使該帳戶的所有其他登錄無效。

這樣做的最佳方法是什麼? PS:我們在我們的Web應用程序中使用Struts,Spring和Hibernate。

謝謝!

+0

看看答案http://stackoverflow.com/questions/1932091/prevent-multiple-login-using-the-same-user-name-and-password – 2011-04-12 06:27:32

回答

2

在服務器端做到這一點是你最好的選擇。您可以保留您的應用程序上下文中的登錄用戶。

嗯,有點提示。使用一個Servlet過濾器,比如說AuthFilter,然後進行驗證,可能是isAlreadyLoggedIn(),在那邊除了用戶名/密碼等其他驗證之外。現在有了這個檢查後,你要麼 - 這取決於你想要做什麼當用戶嘗試登錄時,顯示消息「用戶已登錄」,或者您可以讓用戶登錄並使之前的會話失效。正如討論的here

+0

可能有用戶登錄的可能性在一個瀏覽器上,然後關閉瀏覽器而不做適當的註銷。在這種情況下,如果用戶未關閉其他瀏覽器,我們該如何跟蹤? – ashishjmeshram 2011-04-12 06:21:04

+1

@Ashish這意味着用戶沒有從技術上註銷。 – 2011-04-12 06:22:57

+0

@Ashish:session-timeout在這裏很方便。分配一個較低的值。 – 2011-04-12 06:23:09

0

您可以將登錄的用戶信息存儲在數據庫中,也可以從應用程序上下文中獲取。並且如果用戶已經登錄,則不允許他再次進行會話。

0

谷歌使用一些IP地址的機制註銷已登錄的其他計算機的用戶,而不是在同一個瀏覽器或標籤註銷。

可能是我們可以使用geoip databaseGeolitecity保存使用用戶的密鑰和解決IP地址存儲會話的用戶的IP + Balusc答案。

在數據庫中有一列isLoggedIn。設置爲Y,如果它記錄了,如果來自另一臺計算機或瀏覽器的同一用戶登錄進入,則使會話無效。請注意將其設置爲,如果會話過期。

*爲獲得最佳閱讀Balusc的答案*

prevent-multiple-login-using-the-same-user-name-and-password使用HttpSessionBindingListener

+0

這裏我不推薦這種數據庫方法。如果沒有其他解決方法,這可能是合適的。但我不認爲這是第一選擇。但是,如果您將來需要這些數據用於報告目的,它會很方便。免責聲明:沒有反對票投了。 – 2011-04-12 06:31:09

+0

@Adeel:好的,在classloader重裝過程中被破壞的應用程序上下文如何呢?如何將登錄的用戶保存在服務器端的文件中。 – 2011-04-12 06:33:44

+0

我喜歡這種數據庫方式,但我不會需要這些數據用於任何報告等。我也不想在這裏做任何數據庫更改。我寧願和Adeel的方法一起用一點Balusc的方法去減去db的變化。 :-) – ashishjmeshram 2011-04-12 06:35:09

相關問題