gpt4 book ai didi

asp.net - Request.IsAuthenticated 始终为真。我错过了什么?

转载 作者:行者123 更新时间:2023-12-01 10:11:03 24 4
gpt4 key购买 nike

我正在尝试将用户名添加到 cookie 并在注销时清除它,但是 Request.IsAuthenticated 总是返回 true 所以我无法知道它是否是下一页上的成员.

这是我正在尝试的:

 public void Logout()
{
FormsAuthentication.SignOut();
Session.Abandon(); // trying everything...
}



protected void signin_submit_Click(object sender, EventArgs e)
{
//checklogins...
HttpCookie authCookie = FormsAuthentication.GetAuthCookie(username_top.Text, true);
}

我正在单击从 javascript 函数注销,它会触发调试器,所以我确定它被调用了。

我正在检查 Page_Load 上的值:

protected void Page_Load(object sender, EventArgs e)
{
bool isAuth = Request.IsAuthenticated; // always true !!!
if (isAuth)
{
registeredDiv.Visible = true;
guestDiv.Visible = false;
}
}

我错过了什么?我如何知道用户是否已登录?

编辑:我发现 authenticationMode 在 web.config 中设置为 Windows。

编辑为:

<authentication mode="Forms">

但现在它总是返回 false。我尝试在登录到同一页面后重定向,但仍然没有用。有什么想法吗?

最佳答案

当您说您正在使用调试器并通过 Javascript 进行调用时,您是通过 ajax 进行的吗?我想知道您确实在注销,但没有重定向用户,这意味着用户在那里机器上的 cookie 没有被覆盖/销毁,这样当他们下次请求页面时,它会再次工作,因为 cookie 仍然存在存在。

当用户点击您网站上的注销按钮时,您确实需要让他们重定向到新页面,以便可以正确设置(或取消设置)cookie...这是 MSDN Article on Forms Authentication Signout其示例代码调用 RedirectToLoginPage(),它将如前所述对 cookie 进行分类。

我找到了 FireCookie for Firebug对调试与 cookie 相关的问题非常有帮助。

编辑
根据我链接到的 MSDN 文章:

You can use the SignOut method in conjunction with the RedirectToLoginPage method to log one user out and allow a different user to log in.

您的代码没有调用 RedirectToLoginPage,因此仅调用 FormsAuthentication.SignOut() 是不够的(除非您要手动完成 RedirectToLoginPage 的工作)

编辑2
也许更改您的登录按钮代码以改为使用此功能:

FormsAuthentication.RedirectFromLoginPage(username_top.Text, true)

因为这会自动处理所有 cookie 的设置...

编辑 3
很高兴你解决了这个问题,上面的功能(编辑 2)会完成你所说的你错过的事情(将 cookie 添加到响应中)......

关于asp.net - Request.IsAuthenticated 始终为真。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964347/

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