我正在尝试将用户名添加到 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 文章 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspx及其示例代码调用RedirectToLoginPage()
这将按照前面提到的方式对 cookie 进行排序。
我发现了Firebug 的 FireCookie https://addons.mozilla.org/en-us/firefox/addon/firecookie/对于调试 cookie 相关问题确实很有帮助。
Edit
根据我链接到的 MSDN 文章:
您可以使用 SignOut 方法
与 结合
RedirectToLoginPage 方法登录一
用户退出并允许其他用户
登录。
你的代码没有RedirectToLoginPage
打电话了,所以就打电话FormsAuthentication.SignOut()
还不够(除非您要手动执行 RedirectToLoginPage 的工作)
Edit 2
也许更改您的登录按钮代码以使用此函数:
FormsAuthentication.RedirectFromLoginPage(username_top.Text, true)
因为这将自动处理设置所有 cookie 的内容......
Edit 3
很高兴你把它解决了,上面的函数(编辑2)将完成你所说的你错过的事情(将cookie添加到响应中)......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)