我注意到,当我重新启动ASP.Net应用程序时,记录用户的凭据被记住,他们可能会发现它们自动登录。
只要用户的会话变量,在登录时设置,不会随身携带。 那么,怎样才能“忘记”应用程序的所有会话呢?清除应用程序启动时的所有会话
我知道我不能在Application_Start
事件中使用Session.Abandon()
。
我注意到,当我重新启动ASP.Net应用程序时,记录用户的凭据被记住,他们可能会发现它们自动登录。
只要用户的会话变量,在登录时设置,不会随身携带。 那么,怎样才能“忘记”应用程序的所有会话呢?清除应用程序启动时的所有会话
我知道我不能在Application_Start
事件中使用Session.Abandon()
。
您必须清除您的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这将导致不记住用户的登录状态。
希望这会有所帮助。
重新启动会议之后存在?怎么可能?可能您正在使用会话状态服务器或Sql服务器。您不能在Application_Start事件中使用Session.Abandon(),因为当应用程序启动时,此时不存在会话。在Application_End事件中调用Session.Clear()或Session.Abandon()方法,因此当应用程序重新启动时,它必须清除所有会话。
当新会话启动时使用此代码,即将其添加到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
假设您使用表单身份验证,它是预期的行为:即使您的应用程序已重新启动,用户仍然有一个有效的FormsAuthentication cookie。
如果你真的想登录他们出去,你只需要调用FormsAuthentication.SignOut
。
但我会质疑需要这样做 - 为什么迫使用户再次输入他的凭据?如果您丢失了Session中存储的状态,则可能需要重定向到主页或其他内容,但不需要再次登录。
您是否使用SQL Server来存储会话? – Aristos 2012-07-10 16:21:35
还是ASP.NET状态服务? – bluevector 2012-07-10 16:21:51
您的会话状态是如何配置的?请将此部分的web.config粘贴到此处。 – 2012-07-10 16:23:02