2012-07-25 56 views
0

我想允許一個新的登錄在ASP.NET MVC中通過同一個帳戶「踢」前一個登錄會話。ASP.NET MVC:PreAuthorize-like事件,併發登錄的良好節流點?

這似乎很清楚,我會給每個瀏覽器一個代表會話ID的烹飪。我將在服務器端緩存中跟蹤當前活動的會話ID。如果已經活躍的用戶嘗試登錄,我將驗證業務邏輯(用戶名,密碼,至少距上次活動15分鐘),然後更新緩存在服務器上的活動會話ID。

現在我的問題是,瀏覽器持有無效的會話ID。在這種情況下注入拒絕或重定向登錄的最佳觀點是什麼?

我可以修改AuthorizeAttribute,但是看起來應該有一個更清潔的地方要做到這一點,不會要求我搜索和替換所有的授權通過一個Global.asax事件屬性,例如,或一個控制器事件(我已經在我的項目中擴展了Controller)。

例如,如果PreAuthorize存在,我會在那裏編寫一些代碼來測試請求的Cookie,以查找有效的用戶/會話ID對,如果它不存在,我可以簡單地從請求中刪除身份驗證Cookie,這會導致標準的未授權重定向。

+0

SO文章引用http://teknohippy.net/2008/08/21/stopping-aspnet-concurrent-logins/,它在global.asax中建議了Application_PreRequestHandlerExecute。我正在調查使用... – shannon 2012-07-25 03:11:33

回答

0

因此,經過一些研究,似乎自定義的AuthorizeAttribute通常是正確的方法。但是,就我而言,由於我已經實現了一個自定義角色提供程序,因此它只是一行代碼。這也讓我受益匪淺,因爲我只希望單個角色的會話併發性。一個副作用是任何使用web.config來控制按角色訪問靜態文件也會影響會話併發性。

+0

我也必須關閉Cookie角色緩存。 – shannon 2012-07-26 21:51:28