登录/注销时未清除ASP ASPXAUTH身份验证cookie

R4c*_*OOn 8 asp.net authentication cookies internet-explorer

我正在使用ASP身份验证和集成的Web服务.

用户在登录页面上使用Forms身份验证登录.
要注销,我从Silverlight调用身份验证Web服务并调用logout.

一切都运行正常,但现在有时IE变得疯狂,不再登出用户.

我使用了Fiddler,事实证明,身份验证服务返回一个SetCookie来清除ASPXAUTH cookie,但在下一次调用时,IE仍然设置了cookie.
所以当然因为cookie在那里用户经过身份验证并重新登录而不是被定向到登录页面.

我检查过,没有看到任何其他问题的描述.我无法重现它,我的同事有一个行为不端的IE使它在一个环境中工作正常,而在另一个环境中没有(一个有DEV的问题而另一个有PreProd服务器的问题).

知道可能会发生什么吗?

Ada*_*igh 5

我遇到了这个问题,为了确保用户被注销,现在我使用以下代码:

        FormsAuthentication.SignOut();

        // Drop all the information held in the session
        Session.Clear();
        Session.Abandon();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie1);

        // clear session cookie
        HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
        cookie2.Expires = DateTime.Now.AddYears(-1);
        Response.Cookies.Add(cookie2);

        // Redirect the user to the login page
        Response.Redirect("YourLoginPage.aspx", true);
Run Code Online (Sandbox Code Playgroud)


Ari*_*tos 3

为了避免此问题,当您进行 SignOut 时,下一次调用必须使用 Redirect(pageLogOut, true ); 并停止任何其他活动,直到其完全重定向。参数true非常重要。

调用 SignOut() 后,您必须强制浏览器刷新 cookie 数据,因为如果出于任何原因再次验证请求 cookie,那么 cookie 会获得更多的生存时间,并且不会按照您的要求从浏览器中删除它退出命令。

因此,注销后,重定向到页面 - 或者确保将 cookie 刷新到浏览器,并且在 cookie 完全写入浏览器之前不再询问任何与用户身份验证有关的内容。

希望这有帮助。