执行FormsAuthentication.SignOut()后,用户无法再次登录

时间:2009-08-11 07:37:11

标签: asp.net forms-authentication

我正在使用带有以下Web.Config文件的formAuthentication。

<authentication mode="Forms">
    <forms name="SnowBall" timeout="30" slidingExpiration="true" loginUrl="Login.aspx"      cookieless="AutoDetect">
    </forms>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

我有一个具有LogOut按钮的用户控件。注销按钮的代码是:

FormsAuthentication.SignOut();
Response.Redirect("Login.aspx");

执行此代码后,我无法再对用户进行身份验证。当我单击“登录”时,页面将刷新,并且不会执行事件处理程序。

当我关闭浏览器窗口并重新运行网站时,一切正常。请帮帮我。

2 个答案:

答案 0 :(得分:0)

首先,您需要清除有两个单独的ID,一个是会话ID,用于浏览器会话,另一个是表单身份验证cookie,它是加密的字母数字ID。

每当您使用formauthentication.signout时,您的结构身份验证Cookie将根据您的实施方式删除。但您的会话ID将保留在那里。

您可以使用fiddler / firefox浏览器进行检查。

答案 1 :(得分:0)

我找到了解决方案。希望它可以帮助那里的人

问题在于这一行

Response.Redirect("Login.aspx");

它的作用是将用户重定向到Login.aspx,并使用ReturnUrl作为查询字符串。例如。

Login.aspx?ReturnUrl =“退出发生的页面名称”;

现在发生的事情是FormsAuthentication.GetRedirectUrl()保留了这个查询字符串路径,并且在身份验证之后重定向到此路径。我输入的用户凭据无权查看此页面。所以我总是在登录屏幕上。

要解决此问题,请替换

Response.Redirect("Login.aspx");

使用

Response.Redirect(FormsAuthentication.LoginUrl);
相关问题