2013-04-25 94 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