gpt4 book ai didi

c# - 确保表单例份验证在浏览器关闭时注销

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:17 25 4
gpt4 key购买 nike

我的 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);

我的问题是,是否有我可以在代码中指定的浏览器关闭事件处理程序?也许 Application_End 在 Global.aspx 文件中?或者这不是它的本意?

或者有其他方法可以解决这个问题吗?

谢谢。

这是我的代码:

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] 链接,其中 HitTest 门的答案是:

您使用的浏览器也很重要。 Chrome 具有在后台运行的能力,这会保持 session Cookie 一直存在,直到达到超时为止——当浏览器关闭时它们不会被丢弃(我很难发现这一点)。

2

最佳答案

没有浏览器关闭处理程序,怎么可能有?页面完成服务后,连接将关闭。您不知道用户是离开网站浏览、关闭浏览器,还是让它在那里停留一天。您将不得不使用客户端代码来调用服务来处理此问题,而执行此操作的客户端代码不够可靠,以至于无法使用。

设置身份验证 cookie 时,请确保持久性选项为 false。

此外,当您关闭浏览器时,请确保关闭所有浏览器窗口。如果您有多个浏览器窗口,它们将共享相同的 cookie 缓存,因此诸如 session cookie 之类的东西仍然存在,并让您相信身份验证由服务器保持事件状态,而实际上是浏览器。

关于c# - 确保表单例份验证在浏览器关闭时注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com