我正在使用带有以下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");
执行此代码后,我无法再对用户进行身份验证。当我单击“登录”时,页面将刷新,并且不会执行事件处理程序。
当我关闭浏览器窗口并重新运行网站时,一切正常。请帮帮我。
答案 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);