C# 在应用程序启动时清除所有会话
我注意到,当我重新启动ASP.Net应用程序时,会记住已登录用户的凭据,他们可能会发现他们的服务会自动登录。C# 在应用程序启动时清除所有会话,c#,asp.net,session,session-variables,C#,Asp.net,Session,Session Variables,我注意到,当我重新启动ASP.Net应用程序时,会记住已登录用户的凭据,他们可能会发现他们的服务会自动登录。 只要用户的会话变量(在登录时设置)没有携带,这种行为是不需要的。 那么,如何“忘记”应用程序启动时的所有会话 我发现我无法在应用程序启动事件中使用会话.放弃() foreach (string key in Request.Cookies.AllKeys) { HttpCookie cookie = new HttpCookie(key); cookie.Expires
只要用户的会话变量(在登录时设置)没有携带,这种行为是不需要的。 那么,如何“忘记”应用程序启动时的所有会话
我发现我无法在
应用程序启动
事件中使用会话.放弃()
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。这将导致无法记住用户的登录状态
希望这有帮助。重新启动会话后是否存在?这怎么可能?您可能正在使用会话状态服务器或Sql server。您不能在应用程序启动事件中使用Session.about(),因为当应用程序启动时,不存在任何会话。在应用程序结束事件中调用Session.Clear()或Session.about()方法,因此当应用程序重新启动时,必须清除所有会话。在启动新会话时使用此代码,即将其添加到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
假设您使用的是表单身份验证,这是预期的行为:即使应用程序已重新启动,用户仍然拥有有效的表单身份验证cookie
如果您真的想注销它们,只需调用FormsAuthentication.SignOut
但我怀疑是否需要这样做——为什么要强迫用户再次输入他的凭据?如果丢失了会话中存储的状态,则可能需要重定向到主页或其他内容,但无需让用户再次登录。是否使用SQL server存储会话?或ASP.NET状态服务?如何配置会话状态?请将web.config的这部分粘贴到此处。您使用的是哪种会话模式?是否使用Visual studio调试器尝试此操作,如果是这种情况,VS有时不会停止ASP.net开发服务器,这可能就是问题所在,只需在通知区域中检查并停止它这是“忘记所有会话”这句话的一部分.我从这句话中推断出,您希望“不记得”任何用户。这是真的吗?还是我的理解有问题?这是只忘记当前用户的会话-运行该会话的用户。