Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序启动时清除所有会话_C#_Asp.net_Session_Session Variables - Fatal编程技术网

C# 在应用程序启动时清除所有会话

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

我注意到,当我重新启动ASP.Net应用程序时,会记住已登录用户的凭据,他们可能会发现他们的服务会自动登录。
只要用户的会话变量(在登录时设置)没有携带,这种行为是不需要的。 那么,如何“忘记”应用程序启动时的所有会话


我发现我无法在
应用程序启动
事件中使用
会话.放弃()

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开发服务器,这可能就是问题所在,只需在通知区域中检查并停止它这是“忘记所有会话”这句话的一部分.我从这句话中推断出,您希望“不记得”任何用户。这是真的吗?还是我的理解有问题?这是只忘记当前用户的会话-运行该会话的用户。