C# 被禁止注销的用户

C# 被禁止注销的用户,c#,.net,asp.net,asp.net-mvc,asp.net-membership,C#,.net,Asp.net,Asp.net Mvc,Asp.net Membership,im禁止用户使用以下内容: MembershipUser user = Membership.GetUser(username); if (user != null) { user.IsApproved = false; user.LastLoginDate = DateTime.Now; Membership.UpdateUser(user); } 如果用户当前已登录,他们仍然可以在站点上执行操作,那么我如何才能注销他们?您希望在每个请求的页面加载中检查用户的状态。如

im禁止用户使用以下内容:

MembershipUser user = Membership.GetUser(username);
if (user != null)
{
    user.IsApproved = false;
    user.LastLoginDate = DateTime.Now;
    Membership.UpdateUser(user);
}

如果用户当前已登录,他们仍然可以在站点上执行操作,那么我如何才能注销他们?

您希望在每个请求的页面加载中检查用户的状态。如果它们被禁止,您可以简单地
response.End()
response.Redirect()
将它们重定向到主页。

在您的global.asax上,您可以这样做

Application_OnAuthenticateReuqest(object sender, EventArgs e)
{
  if(!UserHasAccess())
  {
     FormsAuthentication.SignOut();
  }
}

private bool UserHasAccess()
{
   var user = Membership.GetUser(Context.User.Identity);

   return user.isApproved;
}

你可能想考虑某种形式的缓存…


顺便说一句,我假设您在控制器方法上使用了正确的[Authorize]属性。

您必须验证用户是否在每个请求中都被禁止。您可以使用HttpApplication(Global.asax)实现这一点,或者最好使用自定义的HttpModule。

Global.asax
听起来是实现这一点的最佳场所,其次可能是母版页
page\u load
我可以想象。这基本上就是我处理相同问题的方式(尽管我使用的是MVC3,所以它不同),而且它工作得很好。缺点是,如果通过检查数据库禁用了用户,我确实需要检查每个请求。我看到你缓存它的唯一方式是,如果你的成员更新方法实际上正在更新缓存本身,并且你的授权方法检查了所述缓存。请参阅@Bryan的评论。持续的数据库访问可能代价高昂。如果是这样,您可能希望缓存每个已批准的人员,然后让您的更新用户机制也更新缓存。如果这成为瓶颈,您可能会将用户信息存储在某种类型的缓存中(memcached、velocity、甚至会话存储),TTL为,我理解这一点,但是response.End()至少会阻止用户检索更多的内容。