我是否忽略了在ASP.NET中Request.IsAuthenticated总是返回true的问题?

2026-03-30 12:541阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计572个文字,预计阅读时间需要3分钟。

我是否忽略了在ASP.NET中Request.IsAuthenticated总是返回true的问题?

我在尝试向cookie添加用户名并在注销时清除它,但`Request.IsAuthenticated`总是返回true,因此我无法在下一次页面上知道它是否是成员。我正在尝试的是:public void Logout(){ FormsAuthentication.SignOut();}

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

这是我正在尝试的:

我是否忽略了在ASP.NET中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函数的Logout,它点击了调试器,所以我确信它被调用了.

我正在检查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">

但现在它总是返回错误.我在登录到同一页面后尝试重定向但仍然无法正常工作.有任何想法吗?

当你说你正在调试调试器并通过Javascript进行调用时,你是通过ajax这样做的吗?我想知道你确实退出了,但没有重定向用户,这意味着用户在那台机器上的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添加到响应中)……

本文共计572个文字,预计阅读时间需要3分钟。

我是否忽略了在ASP.NET中Request.IsAuthenticated总是返回true的问题?

我在尝试向cookie添加用户名并在注销时清除它,但`Request.IsAuthenticated`总是返回true,因此我无法在下一次页面上知道它是否是成员。我正在尝试的是:public void Logout(){ FormsAuthentication.SignOut();}

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

这是我正在尝试的:

我是否忽略了在ASP.NET中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函数的Logout,它点击了调试器,所以我确信它被调用了.

我正在检查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">

但现在它总是返回错误.我在登录到同一页面后尝试重定向但仍然无法正常工作.有任何想法吗?

当你说你正在调试调试器并通过Javascript进行调用时,你是通过ajax这样做的吗?我想知道你确实退出了,但没有重定向用户,这意味着用户在那台机器上的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添加到响应中)……