2010-01-15 51 views
0

目前我有一个客户端和管理网页。有多个用户将登录到客户端页面。在管理页面中,当我在管理页面中恢复数据库时,我需要注销当前登录到客户端页面的所有用户。任何想法应该如何完成?我目前使用的语言是传统的ASP。如果它可以在ASP.NET中完成,那也可以。谢谢。强制用户注销

+0

提到的结算功能你是说,你要通知在页面的用户应该注销并重新登录,或者是你与他们舒服被迫登录下一次他们去网站上的一个页面? – Jacob

回答

0

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

+0

我很抱歉没有解释详细情况。注销的原因是在管理员恢复数据库后获取最新信息。所以我需要注销所有用户并重置所有会话变量,因为我使用的所有会话都是旧会话。 – lipkee85

2

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

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

据微软的帮助文章,你可以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缓存来存储数据库架构版本和:

在页面加载的开始调用一个辅助类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为真,则继续正常

如果它是假的,然后调用LoginResetHelper.ResetLogin()并重定向到登录页面。

ResetLogin()应执行我上面

+0

因此对于每个页面请求,我需要连接到数据库并检索cookie/session并进行比较?我更喜欢没有与数据库的连接,并强制注销用户。 – lipkee85

+0

SchemaVersion值可以存储在缓存中,因此不必每次都调用数据库 - 只需要一个允许更新的页面即可。 这样,当你改变数据库,你调用网页和变量重置。 – Ezz

+0

但上述重置会话方法是否适用于其他用户使用自己的计算机登录?据我所知,cookies /会话存储在他们自己的机器中,所以如果我想清除cookie /会话,我需要获得多余的机器并清除它。我对吗? – lipkee85