繁体   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