2013-04-25 96 views
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

它将我重定向到上面。

我的代码有什么问题?

我不明白。

感谢

回答

0

您需要设置身份验证cookie的域,以便它可以在你的子域名,以及。

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

为了解决这个问题,该cookie的域设置为".domain.com"而非"domain.com"

<authentication mode="Forms"> 
    <forms loginUrl="..." 
    domain=".domain.com" /><!-- Not "domain.com" --> 
</authentication> 
+0

我不使用这个所以这是没有问题的。 – jmasterx 2013-04-25 03:02:30