我正在使用Forms身份驗證構建ASP.NET MVC3應用程序,並且想在用戶登錄時註銷用戶的所有現有會話。試圖阻止不同工作站上的多人登錄並在同一帳戶下工作。使用Forms身份驗證在ASP.NET MVC3中註銷用戶的其他會話
有沒有處理這個問題的標準方法?註銷現有會話很簡單,但我還沒有遇到過使用同一個帳戶檢查其他會話並將其註銷的方法。
我對如何破解這個問題有一些想法,但我很好奇,如果有一種使用IIS或FormsAuthentication API的建立方法。
我正在使用Forms身份驗證構建ASP.NET MVC3應用程序,並且想在用戶登錄時註銷用戶的所有現有會話。試圖阻止不同工作站上的多人登錄並在同一帳戶下工作。使用Forms身份驗證在ASP.NET MVC3中註銷用戶的其他會話
有沒有處理這個問題的標準方法?註銷現有會話很簡單,但我還沒有遇到過使用同一個帳戶檢查其他會話並將其註銷的方法。
我對如何破解這個問題有一些想法,但我很好奇,如果有一種使用IIS或FormsAuthentication API的建立方法。
,因爲Web,你不能「註銷」會話,直到他們使他們的下一個請求的無國籍狀態(例如,會話可能會保持在一個cookie,它不能在寫客戶端在請求 - 響應交互的上下文之外)。
仍然有一個解決方案,它假定您正在使用會話狀態,最好是所有需要「身份驗證」的控制器都有一個通用基礎控制器。
成功登錄後,生成一個令牌(也許是一個guid)並將其存儲到會話中。還要將其寫入由用戶標識鍵控的應用程序範圍內的存儲(例如數據庫或應用程序上下文)。
在基本控制器中(或者您必須創建一個操作篩選器),檢查會話中的令牌與在應用程序範圍內的商店中爲用戶ID註冊的令牌。如果它們不匹配,請使用標準SignOut()
呼叫註銷用戶。
你可以使用它是基於LastActivityDate
的Membership.IsOnline
屬性:
用戶在線認爲如果 當前日期和時間減去 UserIsOnlineTimeWindow屬性值 早於LastActivityDate 用戶。
這很好。我傾向於這個方向,但確認是很好的。 – Thomas 2011-05-19 13:12:01