2013-04-04 61 views
1

我真的不明白請求cookie和響應cookie之間的區別。而且似乎每次我回發時,如果我沒有手動將cookie從請求重寫爲響應,則它會消失。我該如何解決這個問題?每次我回發保留它時,我必須重寫Cookie嗎?

public string getCookie(string name) { 
     if (Request.Cookies["MyApp"] != null && Request.Cookies["MyApp"][name] != null) { 
      return Request.Cookies["MyApp"][name]; 
     } else if (Response.Cookies["MyApp"] != null && Response.Cookies["MyApp"][name] != null) { 
      return Response.Cookies["MyApp"][name]; 
     } else { 
      return ""; 
     } 
    } 
    public void writeCookie(string name, string value) { 
     Response.Cookies["MyApp"][name] = value; 
     HttpCookie newCookie = new HttpCookie(name, value); 
     newCookie.Expires = DateTime.Now.AddYears(1); 
     Response.SetCookie(newCookie); 
    } 
+0

爲什麼你認爲如果你不重寫每一次cookies丟失? – 2013-04-04 14:43:28

+0

如果我不重寫,我沒有從getCookie得到任何值。 – Bill 2013-04-04 14:44:15

回答

0
Request.Cookies["MyApp"]; 

代碼將返回一個cookie名稱爲 「MyApp的」 這樣做:

Request.Cookies["MyApp"][name] 

您從餅乾稱爲 「MyApp的」 取值 「名」。 但在你setCookie方法的代碼要設置一個cookie一個名爲name,不創建一個名爲「MyApp的」餅乾:

HttpCookie newCookie = new HttpCookie(name, value); 
newCookie.Expires = DateTime.Now.AddYears(1); 
Response.SetCookie(newCookie); 

所以,你應該從你的任何地方刪除["MyApp"],或者你可以做一些事情像這樣在setCookie:

public void writeCookie(string name, string value) { 
     if(Response.Cookies["MyApp"] == null) { 
      HttpCookie newCookie = new HttpCookie("MyApp"); 
      newCookie.Expires = DateTime.Now.AddYears(1); 
      Response.SetCookie(newCookie); 
     } 
     if(Response.Cookies["MyApp"][name] == null) 
      Response.Cookies["MyApp"].Values.Add(name, value); 
     else 
      Response.Cookies["MyApp"][name] = val; 
     // or maybe simple     Response.Cookies["MyApp"][name] = val; will work fine, not sure here 
    } 
0

Request是「事」你當用戶試圖讓您的網站,而Response是響應這一要求的一種方式。

換句話說,看官方的MSDN文檔,即這一部分:

ASP.NET包括兩個內在的cookie集合。通過HttpRequest的Cookies集合訪問的集合 包含由客戶端向Cookie頭中的服務器傳輸的Cookie。 通過Cookie集合HttpResponse 訪問的集合包含在服務器上創建並在Set-Cookie標頭中傳輸到 客戶端的新Cookie。

http://msdn.microsoft.com/en-us/library/system.web.httprequest.cookies.aspx

所以,不,你不必每次都創造新的cookies,除非它們已經過期。只要確保你參考了正確的cookies集合。

+0

我是否必須手動定義域名?它似乎Request.Cookies.Domain爲空 – Bill 2013-04-04 14:53:42

+0

我相信,如果你不定義它,它會得到一個默認值。我不確定ASP.NET是否提供了默認或瀏覽器。您可以輕鬆閱讀瀏覽器保存的Cookie,以確切查看保存的內容。 – 2013-04-04 15:14:06

0

您可能想要檢查分配給cookie的域和路徑。這可能是因爲路徑太特殊或者因爲設置了錯誤的域名而導致您保存的Cookie正在被孤立。

域是瀏覽器看到的服務器名稱,例如「yourdomain.com」。如果cookie設置的域不是這個域,那麼瀏覽器將永遠不會發回它。同樣,cookie的路徑是被請求資源的路徑,例如「/ forum/admin/index」等。該cookie是針對該位置和所有子位置發送的,但不是用於父位置。如果您訪問位於「/ forum」目錄中的頁面,則不會發送爲「/ forum/admin/index」設置的cookie。上述

相關問題