1

我一直在开发的应用程序(ASP.Net 4 / C#)使用 FormsAuthentication.RedirectToLoginPage() 在用户单击注销按钮后将其发送回登录页面。

我发现当应用程序部署在 IIS 站点的根目录时,重定向不起作用。单击注销按钮只会重新加载页面。

当应用程序部署到站点内的应用程序虚拟文件夹时,重定向工作属性。

我也尝试过使用 Respond.Redirect(),它也不起作用。我尝试从头开始重新创建该站点(不走运)。

更新:我已经能够在另一台机器上验证这种行为,所以我很有信心它不仅仅是一个网络服务器。

注销按钮的代码:

    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();
    }

谢谢您的帮助!

4

1 回答 1

0

内部FormsAuthentication.RedirectToLoginPage所做的就是调用 Response.Redirect。另外,打电话是不好的做法Response.End。我建议使用Fiddler之类的跟踪工具来查看调用该方法时实际响应包含的内容。这应该对浏览器正在接收的内容有所了解。

Response.Redirect不起作用的事实表明存在更大的问题。如果 HTTP 302 未返回给客户端,则 ASP.net 管道中的某些内容妨碍了重定向响应。

于 2012-11-10T04:33:55.147 回答