2012-02-15 247 views
2

我試圖讓一個子域爲整個域創建一個cookie,而不是僅僅使用屬性cookie.domain的子域,所以這兩個子域可以共享cookie信息。當我部署到IIS時,我創建了2個Cookie,一個用於域,另一個用於子域。這是爲什麼?當我更新cookie時,唯一得到更新的是子域1,呈現域cookie是無用的。爲什麼cookie.domain設置了兩個cookie?

我試圖通過我的代碼來追蹤這個,但在調試模式下運行visual studio並沒有真正設置任何cookie,除非我不設置cookie.domain屬性。離開domain.cookie我得到一個cookie設置爲localhost,但只有一個cookie。有什麼想法嗎?

+0

向我們展示一些實際的代碼可能會幫助我們更輕鬆地診斷問題。 – LukeH 2012-02-15 22:54:00

+0

確實如此,但我不確定哪些代碼可能是負責任的,儘管也許創建這兩個cookie是某種默認行爲。請參閱下面的解決方案 – BeachBum 2012-02-16 15:14:56

回答

2

好吧,所以我終於回答了我自己的問題。我將首先解決第二個問題,關於在調試模式下運行網站:

Visual Studio將調試到站點http:// localhost:[someport]。因此,如果代碼設置爲使用cookie.domain爲mydomain.com創建cookie,則Cookie不會設置,因爲瀏覽器知道您位於localhost而不是指定的域。爲了彌補這一點,我把一個條目放在我的hosts文件中,以便mydomain.com指向127.0.0.1。然後我以調試模式啓動了該站點。當網站作爲本地主機發布時,我將browswer中的URL更改爲http://subdomain.domain.com:[someport]並刷新。現在可以設置cookie。

這樣做幫助我追蹤我的代碼,找到由我的子域網站創建的兩個Cookie的問題。我發現,由於cookie.domain,mydomain.com cookie正在創建好(下面的CreateCookie方法)。但是,當我試圖更新cookie的過期時(UpdateCookie在下面),它恢復到認爲它應該使用子域cookie並繼續並在沒有找到時創建它。我只需要在設置cookie和更新過期之前再次設置cookie.domain。現在我只有一個cookie。

public void CreateCookie() 
{ 
    HttpCookie cookie = new HttpCookie(mConfig.webCookie); 
    TimeSpan span = new TimeSpan(0, 0, 30, 0); 
    DateTime time = DateTime.Now; ; 

    cookie["Username"] = mEncrypt.Encrypt(mUser.Username); 
    cookie.Domain = "mydomian.com"; 

    cookie.Expires = time + span; 

    HttpContext.Current.Response.Cookies.Add(cookie); 
} 

public void UpdateCookie() 
{ 
    TimeSpan span = new TimeSpan(0, 0, 30, 0); 
    DateTime time = DateTime.Now; 

    HttpCookie cookie = HttpContext.Current.Request.Cookies[mConfig.webCookie]; 

    // without specifying the domain the cookie will be set with the subdomain 
    cookie.Domain = "mydomain.com"; 
    HttpContext.Current.Response.Cookies.Set(cookie); 

    HttpContext.Current.Response.Cookies[mConfig.webCookie].Expires = time + span; 
} 
0

您可以在httpCookies

<httpCookies domain="domain.com" httpOnlyCookies="false" requireSSL="false" /> 

集domain.com上web.config全域和子域設置這個cookie名稱,而不是www.domain.com存檔你說什麼,對具有相同的cookie域和子域。類似的,你設置了這個cookie設置的認證參數取決於你所說的cookie。

在你的問題「爲什麼呢?」答案是,如果你沒有爲cookie設置這個參數,那麼cookies實際上使用當前的主機名,所以如果子域的名字改變,它們就不同了。

+0

我試着通過在我的解決方案中註釋掉我的cookie.domain行,並將httpCookies添加到web.config中。我仍然創建了兩個Cookie,一個用於域,另一個用於子域。 – BeachBum 2012-02-16 15:57:49

相關問題