2010-02-18 52 views
1

我有2個子域,我需要從兩個網站設置和讀取相同的cookie。跨子域的Asp.NET cookie不更新和不過期

當我使用本地主機時,一切工作正常。

當我切換到使用有效的網址時,我更新它時cookie的信息並未真正更新(註銷時有效日期)。

我必須設置爲「.mysite.com」

什麼是錯的cookie域?

回答

0

這裏是我的代碼:(工作在本地主機上正常,但不子域,從來沒有註銷用戶因爲cookie犯規得到過期)

登錄頁面:

FormsAuthentication.SetAuthCookie(UserName.Text, true); 
    // set the active collab cookie 
    Member member = MemberManager.GetMemberByUsername(UserName.Text); 

    HttpCookie cookie = new HttpCookie("Token", member.Profile.Token); 
    cookie.Domain = ConfigurationManager.AppSettings["CookieDomain"]; 
    cookie.Expires = DateTime.Now.AddYears(1); 
    Response.Cookies.Add(cookie); 

Globax ASAX

if (HttpContext.Current.Request.Cookies["Token"] != null) { 
     string token = HttpContext.Current.Request.Cookies["Token"].Value; 
     if (!string.IsNullOrEmpty(token)) { 
       // If the user is logged in with a different token 
       // or not logged in at all 
       // then log them in with the token from the cookie 
       if ((MemberManager.CurrentMember != null && MemberManager.CurrentMember.Profile.Token != token) || User == null) { 

        Member member = MemberManager.GetMemberByToken(token); 
        if (member != null) { 
         FormsAuthentication.SetAuthCookie(member.User.UserName, true); 
       } 
      } 
       } 
      } 

註銷碼:

if (Request.Cookies["Token"] != null) { 
       HttpCookie aCookie = Request.Cookies["Token"]; 
       aCookie.Expires = DateTime.Now.AddDays(-1); 
       Response.Cookies.Add(aCookie); 
} 

的Web.Config

<machineKey 
     validationKey="{-snip-}" 
     decryptionKey="{-snip-}" 
     validation="SHA1" 
     decryption="AES" /> 

<authentication mode="Forms"> 
     <forms name="AuthCookie" 
      path="/" 
      loginUrl="~/login.aspx" 
      protection="All" 
      timeout="60"> 
     </forms> 
    </authentication> 
+0

首先到期時域設置到cookie:你應該更新你的問題,而不是發表評論。 意見:通常你不必設置cookie域。 Cookie可通過TLD(頂級域名)訪問,不需要按此方式進行按摩。如果你的應用程序在不同的頂級域名(TLD)中,那麼它不會起作用,儘管我懷疑這不是你的問題。此外,我不明白你想要完成什麼,所以我可能無法幫助你。看起來您正在將FormsAuthentication與其他身份驗證管理策略並行實施。你做這件事的原因是什麼? – 2010-02-19 15:30:22

0

試試這個:

if (Request.Cookies["Token"] != null) { 
       HttpCookie aCookie = Request.Cookies["Token"]; 
       aCookie.Expires = DateTime.Now.AddDays(-1); 
       Response.Cookies["Token"] = aCookie; 
} 

而不是增加它的,將其設置爲現有的Cookie。在web.config

+0

我得到這個錯誤 'System.Web.HttpCookieCollection.this [string]'不能被分配給 - 它是隻讀的 – user176657 2010-02-19 15:03:33

0

你的窗體身份驗證設置需要,從而實現跨應用重定向:

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx" protection="All" timeout="960" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="false" defaultUrl="~/default.aspx" enableCrossAppRedirects="true"/> 
</authentication> 
+0

它沒有區別,但是謝謝! – user176657 2010-02-19 15:07:56

1

答案是在註銷

HttpCookie aCookie = Request.Cookies["Token"]; 
aCookie.Expires = DateTime.Now.AddDays(-1); 
aCookie.Domain = ConfigurationManager.AppSettings["CookieDomain"]; 
Response.Cookies.Add(aCookie);