我正在开发的应用程序(ASP.Net 4 / C#)使用FormsAuthentication.RedirectToLoginPage()在用户单击Logout按钮后将用户发送回登录页面。
我发现当应用程序部署在IIS站点的根目录时,重定向不起作用。单击注销按钮只需重新加载页面。
当应用程序部署到站点内的Application虚拟文件夹时,重定向工作属性。
我也尝试过使用Respond.Redirect(),这也行不通。我尝试过从头开始重新创建网站(没有运气)。
更新:我已经能够在另一台计算机上验证此行为,因此我非常有信心它不仅仅是一台Web服务器。
退出按钮的代码:
protected void lbLogout_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
Session.Abandon();
// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
cookie1.Path = FormsAuthentication.FormsCookiePath;
cookie1.HttpOnly = true;
Response.Cookies.Add(cookie1);
// clear session cookie
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
FormsAuthentication.RedirectToLoginPage();
//Response.Redirect("~/login.aspx");
Response.End();
}
感谢您的帮助!
答案 0 :(得分:0)
所有FormsAuthentication.RedirectToLoginPage
在内部都会调用Response.Redirect。此外,调用Response.End
是不好的做法。我建议使用跟踪工具(如Fiddler)来查看调用方法时实际响应包含的内容。这应该可以说明浏览器正在接收的内容。
Response.Redirect
无效的事实是一个更大问题的迹象。如果没有将HTTP 302返回给客户端,则ASP.net管道中的某些内容会妨碍重定向响应。
答案 1 :(得分:0)
我在网上的一个不起眼的地方发现了这个,甚至没有问过上面的问题,但它解决了我的问题,这和你的问题一样:
我几乎失去了想法,试图找到解决这个问题的方法。一切在其他浏览器上运行良好,但firefox和chrome在登录后不会在初始页面上记录用户。
当我在site.master文件中将表单的action属性设置为action =“default.aspx”时,它开始工作。
当我查看资源管理器调试器时,表单操作具有默认值,但在chrome和firefox操作中没有设置属性。我认为这可能是.net登录状态控制脚本的问题。
由于我的系统现在正常工作,我不会进一步搜索,但我希望这对有类似问题的人有所帮助。