簡體   English   中英

如何注銷不是當前用戶的多個MembershipUser?

[英]How to log off multiple MembershipUsers that are not the current user?

我正在使用隸屬於MVC2默認項目的MembershipProvider。

我希望能夠獲取用戶名列表,並關閉用戶,並在需要時銷毀他們的會話。 我似乎最接近的是:

foreach(string userName in UserNames)
{
    MembershipProvider MembershipProvider = new MembershipProvider();
    MembershipUser membershipUser = MembershipProvider.GetUser(userName, true);
    Session.Abandon();
    FormsAuthentication.SignOut();
}

我想我需要使用與我想要注銷的用戶相關的會話和/或注銷方法,但我不確定它們會在哪里。

這樣做的正確方法是什么?

這不會奏效......

Session.Abandon()將用於Current HttpContext。 不是像你想要的那樣為每個用戶。 FormsAuthentication.SignOut()也是如此。

您最好的選擇是在Application_AuthenticateRequest事件中針對該數組檢查當前用戶並在那里簽名:

  protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
            if (User.Identity.IsAuthenticated)
            {
                //add your ckeck here

                 if (Usernames.Contains(User.Identity.Name))
                    {
                       Session.Abandon();
                       FormsAuthentication.SignOut();
                    }
            }       
    }

當我這樣做時,我沒有使用會員提供商,但基本上我保存了用戶登錄時在數據庫中訪問的SessionId,Username和lastPage。 然后,每個頁面使用當前的SessionID來獲取用戶名並執行相關的用戶名內容,例如當前用戶的顯示余額等。如果沒有該會話的有效用戶,則返回登錄頁面。

這讓我看到了用戶在網站上的進展,並手動斷開了我想要的任何人並給了我每個用戶的單點登錄。 global.asx頁面中還有一堆清理代碼

事實證明,這與MembershipProvider沒有多大關系,而是與FormsService有關。 我的最終解決方案被證明是這里發布的另外兩個答案的混合體。

我最終在LogOn操作中的Account控制器中創建了自己的FormsAuthenticationTicket。 我為用戶的經過身份驗證的會話生成唯一標識符,並將該標識符保存到數據庫中。 我還將用戶的ID添加到auth票證的UserData部分以進行可靠查找。 默認情況下,auth票證僅包含其用戶名。 然后,在用戶成功登錄后,FormsAuthenticationTicket將存儲在cookie中。

基本上所有這些都取代了FormsService.SignIn(model.UserName,model.RememberMe);

我還在Global.asax中添加了public void Application_ReleaseRequestState(object sender,EventArgs args)。 我不確定這是否被視為擴展功能或什么,因為它似乎不是一個覆蓋。 在Application_ReleaseRequestState內部,它從cookie獲取用戶的FormsAuthenticationTicket。 然后它解密auth票證,並從票證的UserData部分獲取用戶的UserID。 然后,它詢問數據庫是否仍然有效。 如果故障單無效,則會將用戶的cookie設置為過期。

要強制用戶注銷,我可以在數據庫中更改其身份驗證票證到期日期,也可以在數據庫中切換其身份驗證票證的禁用位。 無論哪種方式,當Application_ReleaseRequestState詢問數據庫時,如果他們的身份驗證票證有效,他們就不會。 因此,他們的cookie將設置為在用戶在進行此檢查后命中的下一頁上過期。

暫無
暫無

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

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