0

我有一个子域:kezblu.mysite.com。

它实际上位于 mysite.com/kezblu

我有代码会要求用户登录,如果他们不是:

protected void HandleLoginRedirect()
{
    if (IsRequestedPage("Login") && Authorization.IsAuthenticated())
    {
        Response.Redirect("default.aspx");
    }
    else if (!Authorization.IsAuthenticated() && !IsRequestedPage("Login"))
    {
        string fileName = this.Page.Request.Url.ToString();
        fileName = fileName.Remove(0, fileName.LastIndexOf("/") + 1);

        Response.Redirect("Login.aspx?redirect=" + fileName);
    }
}


    public bool IsRequestedPage(string pageName)
    {
        return Request.RawUrl.StartsWith("/" + pageName + ".aspx");
    }

问题是我去 kezblu.mysite.com/kezblu

我最终得到:

http://kezblu.mysite.com/kezblu/Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=Login.aspx?redirect=default.aspx

我在退出时也注意到了,即使我在 kezblu.mysite.com/somewhere.aspx

它将我重定向到上述内容。

我的代码有什么问题?

我不明白。

谢谢

4

1 回答 1

0

您需要设置身份验证 cookie 的域,以便它也适用于您的子域。

当您请求子域中的页面时,如果您未通过身份验证,它会将您重定向到您域中的登录页面。您进行身份验证,服务器发送一个仅用于域的身份验证 cookie;不是子域。然后,您将被重定向回您来自子域的页面,但您的浏览器不会发送身份验证 cookie。这会导致您的子域页面再次重定向回登录页面。这一次,您的浏览器确实发送了 cookie,登录页面会自动将您重定向回来,但您的浏览器不会发送 cookie,因此循环开始。

要解决此问题,请将 cookie 的域设置为".domain.com"而不是"domain.com"

<authentication mode="Forms">
  <forms loginUrl="..."
    domain=".domain.com" /><!-- Not "domain.com" -->
</authentication>
于 2013-04-25T01:51:12.607 回答