我的asp.net网络应用程序和Chrome存在问题。当我关闭Chrome浏览器窗口时,它不会清除Cookie。这意味着如果我使用表单身份验证登录我的Web应用程序,然后关闭并重新打开浏览器窗口,则表明我仍然登录!
我读到这可能是Chrome错误,但必须有一些解决方法。
我发现了this帖子,并希望在浏览器窗口关闭时运行以下代码:
FormsAuthentication.SignOut();
Session.Abandon();
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);
// clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
我的问题是,是否有一个浏览器关闭的事件处理程序,我可以在我的代码中的某处指定?可能是Global.aspx文件中的Application_End
?或者这不是它的意思?
还是有另一种方法可以解决这个问题吗?
谢谢。
以下是我的代码:
private void Login_Click(Object sender, EventArgs e)
{
// Create a custom FormsAuthenticationTicket containing
// application specific data for the user.
string username = UserNameTextBox.Text;
string password = UserPassTextBox.Text;
bool isPersistent = false;
if (Membership.ValidateUser(username, password))
{
string userData = "ApplicationSpecific data for this user.";
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
isPersistent,
userData,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));
// Redirect back to original URL.
Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent));
}
else
{
Msg.Text = "Login failed. Please check your user name and password and try again.";
}
}
默认情况下,仅将isPersistent
替换为checkbox.Checked
,false
。
编辑:
可能发生的另一件令人讨厌的事情是来自[this]链接,其中最佳答案是:
您使用哪种浏览器也很重要。 Chrome可以在后台运行,并且可以使会话Cookie保持不变,直到超时达到 - 当浏览器关闭时它们不会被删除(我发现这很难)。
答案 0 :(得分:2)
没有浏览器关闭处理程序,怎么会有?页面完成后,连接将关闭。你不知道用户是否浏览了网站,关闭了浏览器,还是让它在那里待了一天。您必须使用客户端代码来调用服务来处理这个问题,并且执行此操作的客户端代码不够可靠,无法使其无效。
设置身份验证Cookie时,请确保持久性选项为false。
此外,当您关闭浏览器时,请确保关闭所有浏览器窗口。如果您有多个浏览器窗口,它们将共享相同的cookie缓存,因此会话cookie之类的东西仍然存在,并且让您相信当服务器真正是浏览器时,身份验证将保持活动状态。