2012-07-10 72 views
4

我注意到,当我重新启动ASP.Net应用程序时,记录用户的凭据被记住,他们可能会发现它们自动登录。
只要用户的会话变量,在登录时设置,不会随身携带。 那么,怎样才能“忘记”应用程序的所有会话呢?清除应用程序启动时的所有会话

我知道我不能在Application_Start事件中使用Session.Abandon()

+0

您是否使用SQL Server来存储会话? – Aristos 2012-07-10 16:21:35

+0

还是ASP.NET状态服务? – bluevector 2012-07-10 16:21:51

+0

您的会话状态是如何配置的?请将此部分的web.config粘贴到此处。 – 2012-07-10 16:23:02

回答

0

您必须清除您的cookies是这样的:

foreach (string key in Request.Cookies.AllKeys) 
{ 
    HttpCookie cookie = new HttpCookie(key); 
    cookie.Expires = DateTime.UtcNow.AddDays(-7); 
    Response.Cookies.Add(cookie); 
} 

EDTI: 做这一切你的cookies都将expired.and浏览器将尝试删除所有找你cookies.and这将导致不记住用户的登录状态。

希望这会有所帮助。

+0

这没有任何意义.. ..在女巫用户会做到这一点,当什么时候? – Aristos 2012-07-10 16:34:13

+0

这是你的句子“忘记所有会话”的一部分。我从这句话中推断出的是你想“不记得”任何用户。这是真的吗?还是我的理解出了什么问题? – 2012-07-10 16:51:40

+0

这只会忘记当前用户的会话 - 运行该会话的用户。 – Aristos 2012-07-10 17:05:46

1

重新启动会议之后存在?怎么可能?可能您正在使用会话状态服务器或Sql服务器。您不能在Application_Start事件中使用Session.Abandon(),因为当应用程序启动时,此时不存在会话。在Application_End事件中调用Session.Clear()或Session.Abandon()方法,因此当应用程序重新启动时,它必须清除所有会话。

1

当新会话启动时使用此代码,即将其添加到Global.asax中

#region remove all cookies 

    string[] myCookies = Request.Cookies.AllKeys; 
    foreach (string cookie in myCookies) 
    { 
     Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1); 
    } 

    #endregion 
0

假设您使用表单身份验证,它是预期的行为:即使您的应用程序已重新启动,用户仍然有一个有效的FormsAuthentication cookie。

如果你真的想登录他们出去,你只需要调用FormsAuthentication.SignOut

但我会质疑需要这样做 - 为什么迫使用户再次输入他的凭据?如果您丢失了Session中存储的状态,则可能需要重定向到主页或其他内容,但不需要再次登录。

相关问题