强制用户注销

时间:2010-01-15 02:11:27

标签: authentication asp-classic logout

目前我有一个客户端和管理员网页。有多个用户将登录到客户端页面。在管理页面中,当我在管理页面中恢复数据库时,我需要注销当前登录到客户端页面的所有用户。有什么想法应该怎么做?我目前使用的语言是经典ASP。如果它可以在ASP.NET中完成,那也很好。感谢。

2 个答案:

答案 0 :(得分:2)

这真的取决于你缓存的内容。如果是数据,则可以清除缓存的数据,而不是强制用户再次登录。

如果它的数据或权限/安全性发生了变化,那么您可以在数据库中设置名为SchemaVersion的设置,该设置存储当前版本的数据库。每个登录到应用程序的用户请求都可以将cookie /会话版本与数据库中的版本进行比较,如果它不同,则让客户端删除会话/ cookie并强制重新登录。

根据Microsoft帮助文章,您可以reset the session这样:

Session.Abandon(); 
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

从MSDN您可以clear your cookie这样:

if (HttpContext.Current.Request.Cookies["MyCookieName"] != null)
{
    HttpCookie aCookie = HttpContext.Current.Request.Cookies["MyCookieName"];
    aCookie.Expires = DateTime.Now.AddDays(-10);
    aCookie.Value = "";
    HttpContext.Current.Response.Cookies.Add(aCookie);
}

这应该强制登录,但我自己也没有证实。

总而言之,您可以使用ASP.NET Cache来存储db模式版本,并且:

在页面加载时,调用帮助程序类LoginResetHelper.IsDbValid()以查看是否需要再次登录

在辅助课程中你会问

if (Cache["SchemaVersion"] == null)
{
   // retrieve schemaVersion from db

   Cache.Add("SchemaVersion", schemaVersion);
}
HttpCookie oCookie = new HttpCookie("ClientSchemaVersion");
if (Cache["SchemaVersion"] == oCookie.Value)
   return true;
return false;

如果IsDbValue为true,则继续正常

如果为false,则调用LoginResetHelper.ResetLogin()并重定向到登录页面。

ResetLogin()中,您将执行我上面提到的清算功能

答案 1 :(得分:0)

最简单的方法是定义一个Application变量,表明您的网站处于维护状态,并且在每个页面中通过服务器端包含,检查该变量并重定向到相应的错误页面。