2009-02-05 24 views
3

我們的SSO登錄過程對SQL Server中的自定義用戶存儲使用表單身份驗證。如何判斷用戶帳戶是否已使用ASP.Net Forms身份驗證登錄?

我們的新安全要求之一是隻允許帳戶一次有一個活動會話。因此,無論用戶何時登錄,我們都會檢查登錄憑證是否已經激活,並且最好防止新用戶再次登錄,直到其他會話結束。或者我們可以強制另一個會話結束,如果這會更容易實現。

有沒有一種簡單的方法來做到這一點與表單身份驗證?我們已經考慮了一種定製方法,即在數據庫中跟蹤每個會話,但這需要很多工作,我們可能需要修改所有應用程序以檢測session_end,我希望避免這種情況。我認爲必須在Forms Auth中處理這個問題。

我見過MembershipUser.IsOnline()方法,這看起來很理想,但我們沒有使用Membership提供者。

更新:要清楚,我不需要檢查當前用戶是否已登錄,我需要知道是否有人已經使用相同的帳戶登錄。

+1

這已經過去了一段時間,但我看到它已經成爲一個值得注意的問題,所以我會分享我的解決方案 - 我們最終按照什麼Kb的方式進行了自定義方法。建議,基本上跟蹤數據庫中的用戶活動。對於每個用戶,我們會存儲最後的登錄日期和會話密鑰。密鑰是在用戶登錄時生成和存儲的,然後我們會檢查每個頁面上的當前密鑰。 如果當前用戶的密鑰與數據庫中的密鑰不匹配,我們會使其會話無效並立即將其註銷。 – Raelshark 2011-10-29 16:38:39

回答

2

如果我理解你正確,你將需要存儲基於用戶ID的最後一個活動狀態。
Membership.IsOnline()通過檢查LastActivityDate屬性在會員數據庫中保存實現。
因此,您需要跟蹤用戶活動。
你也許可以實現一個更新用戶活動時間戳的httpmodule。

+0

嗯,httpmodule是一個有趣的想法。我會研究一下。 – Raelshark 2009-02-05 19:29:45

2

如果HttpContext.Current.User屬性不爲空,則它們已登錄。並且Identity.IsAuthenticated爲true。

7

試試這個:

System.Web.HttpContext.Current.User.Identity.IsAuthenticated 
相關問題