Pab*_*buc 3 asp.net authentication
我正在尝试向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);
}
Run Code Online (Sandbox Code Playgroud)
我点击了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;
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?如何知道用户是否已登录?
编辑:我发现authenticationMode在web.config中设置为Windows.
编辑为:
<authentication mode="Forms">
Run Code Online (Sandbox Code Playgroud)
但现在它总是返回错误.我在登录到同一页面后尝试重定向但仍然无法正常工作.有任何想法吗?
当你说你正在调试调试器并通过Javascript进行调用时,你是通过ajax这样做的吗?我想知道你确实退出了,但没有重定向用户,这意味着用户在那台机器上的cookie没有被覆盖/破坏,所以当他们下次请求一个页面时,它再次起作用,因为cookie仍然存在存在.
当用户点击您网站上的注销按钮时,您确实需要将它们重定向到新页面,以便可以正确设置(或取消设置)Cookie ...这是关于表单身份验证注销的MSDN文章及其示例代码调用RedirectToLoginPage()将按前面提到的方式对cookie进行排序.
我发现FireCook for Firebug在调试cookie相关问题方面非常有用.
编辑
根据我链接到的MSDN文章:
您可以将SignOut方法与RedirectToLoginPage方法结合使用,将一个用户注销,并允许其他用户登录.
你的代码没有RedirectToLoginPage调用,所以只是调用FormsAuthentication.SignOut()是不够的(除非你要手动完成RedirectToLoginPage的工作)
编辑2
也许更改您的登录按钮代码以使用此功能:
FormsAuthentication.RedirectFromLoginPage(username_top.Text, true)
Run Code Online (Sandbox Code Playgroud)
因为这将自动处理设置所有cookie的东西......
编辑3
很高兴你把它整理出来,上面的功能(编辑2)就完成了你所说的错过了(将cookie添加到响应中)......
| 归档时间: |
|
| 查看次数: |
9304 次 |
| 最近记录: |