我注意到,当我重新启动ASP.Net应用程序时,记住用户的凭据会被记住,他们可能会发现它们会自动登录。
只要在登录时设置的用户会话变量未被携带,就会出现此行为。
那么,我如何“忘记”应用程序启动的所有会话?
我发现我无法在Session.Abandon()
事件中使用Application_Start
。
答案 0 :(得分:1)
重启后会话存在吗?怎么可能?可能您正在使用会话状态服务器或Sql服务器。您不能在Application_Start事件中使用Session.Abandon(),因为在应用程序启动时,此时不存在会话。在Application_End事件中调用Session.Clear()或Session.Abandon()方法,因此当应用程序重新启动时,它必须清除所有会话..
答案 1 :(得分: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
答案 2 :(得分:0)
你必须清除这样的cookie:
foreach (string key in Request.Cookies.AllKeys)
{
HttpCookie cookie = new HttpCookie(key);
cookie.Expires = DateTime.UtcNow.AddDays(-7);
Response.Cookies.Add(cookie);
}
EDTI: 这样做你的所有cookie都将过期。浏览器将尝试删除你所有的cookie。这将导致你不记得用户的登录状态。
希望这会有所帮助。
答案 3 :(得分:0)
假设您正在使用表单身份验证,这是预期的行为:即使您的应用程序已重新启动,用户仍然拥有有效的FormsAuthentication cookie。
如果您确实想要注销,只需拨打FormsAuthentication.SignOut
。
但我怀疑是否需要这样做 - 为什么要强迫用户再次输入他的凭据?如果您丢失了存储在Session中的状态,则可能需要重定向到主页或其他内容,但不需要让用户再次登录。