2010-06-14 48 views
8

Asp.NET MVC中是否有可能正确地注销用户?我知道你可以使用:以编程方式注销“特定”用户

FormsService.SignOut(); 

但是这是指发出请求的网页的上下文。我试图阻止用户登录两次。所以,如果我打电话:

MembershipUser membershipUser = Membership.GetUser(userName); 
if (membershipUser.IsOnline == true) 
{ 
    // log this user out so we can log them in again 
    FormsService.SignOut();  
} 

调用FormsService.SignOut();对用户说的上下文无关,与谁已经登录另一个网页浏览器?

回答

2

一种常见的方法来实现这一目标是,在每个页面加载,检查当前用户是否需要退出。

if (User.Identity.IsAuthenticated && UserNeedsToSignOut()) 
{ 
    FormsAuthentication.SignOut(); // kill the authentication cookie: 
    Response.Redirect("~/default.aspx"); // make sure you redirect in order for the cookie to not be sent on subsequent request 
} 

您可能会担心这种方法会太慢,

“为什么我必须把这个该死的功能,每个页面加载?这可能访问数据库每一次!”

它不需要太慢。您可以缓存任何时候不应登录的用户列表。如果他们的用户名在该缓存中,那么退出代码将在他们下一次访问页面时被触发。