FormsAuthentication.RedirectToLoginPage在站点根目录时应用程序不起作用

时间:2012-11-07 23:57:00

标签: c# asp.net .net c#-4.0 iis-7.5

我正在开发的应用程序(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();
    }

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

所有FormsAuthentication.RedirectToLoginPage在内部都会调用Response.Redirect。此外,调用Response.End是不好的做法。我建议使用跟踪工具(如Fiddler)来查看调用方法时实际响应包含的内容。这应该可以说明浏览器正在接收的内容。

Response.Redirect无效的事实是一个更大问题的迹象。如果没有将HTTP 302返回给客户端,则ASP.net管道中的某些内容会妨碍重定向响应。

Alden,Sr http://projects.nathanalden.com/JuniorRoute

答案 1 :(得分:0)

我在网上的一个不起眼的地方发现了这个,甚至没有问过上面的问题,但它解决了我的问题,这和你的问题一样:

我几乎失去了想法,试图找到解决这个问题的方法。一切在其他浏览器上运行良好,但firefox和chrome在登录后不会在初始页面上记录用户。

当我在site.master文件中将表单的action属性设置为action =“default.aspx”时,它开始工作。

当我查看资源管理器调试器时,表单操作具有默认值,但在chrome和firefox操作中没有设置属性。我认为这可能是.net登录状态控制脚本的问题。

由于我的系统现在正常工作,我不会进一步搜索,但我希望这对有类似问题的人有所帮助。