2010-04-22 57 views
6

是否有可能更新而不更新的到期時間的ASP.NET餅乾價值?我發現,如果我嘗試更新Cookie而未更新到期日期,則該Cookie不再存在。我有以下代碼,我嘗試修改。如果每次更新cookie值,過期都會有什麼意義?沒有更新到期的ASP.NET Cookie更新值?

 HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 

     if (cookie == null) 
      cookie = new HttpCookie(constantCookie); 

     cookie.Expires = DateTime.Now.AddYears(1); 
     cookie.Value = openClose; 
     HttpContext.Current.Response.Cookies.Set(cookie); 
+2

「有什麼意義有過期,如果每次更新cookie值,過期也是如此?「 - 其實這就是你想要很多時間。類似情景:「如果你不訪問了一個月,我們會約你忘記」,取決於你每次訪問該cookie的時間設置爲過期一個月因此事實。 – 2010-04-22 20:05:08

+0

非常真實,在這一點上我肯定會同意你的意見。 – aherrick 2010-04-22 20:19:53

回答

5

的ASP.NET的HttpCookie類不能初始化在閱讀從HTTP請求一個cookie(因爲HTTP規範不要求客戶機甚至過期值發送到服務器中的Expires屬性第一名)。如果您在將Cookie設置回HTTP響應之前沒有設置Expires屬性,那麼它會將其變爲會話Cookie而不是持久性cookie。

如果你真的必須保留期滿,比你能設置初始到期日爲cookie值的一部分,那麼當你在讀取cookie,解析出的值,並設置新的到期相匹配。

不包括任何其他數據,因此Cookie是不是真的有幫助的一個例子 - 你將不得不與實際數據以某種方式序列化要存儲:

HttpCookie cookie = HttpContext.Current.Request.Cookies[constantCookie]; 
DateTime expires = DateTime.Now.AddYears(1); 

if (cookie == null) { 
    cookie = new HttpCookie(constantCookie); 
} else { 
    // cookie.Value would have to be deserialized if it had real data 
    expires = DateTime.Parse(cookie.Value); 
} 

cookie.Expires = expires; 
// save the original expiration back to the cookie value; if you want to store 
// more than just that piece of data, you would have to serialize this with the 
// actual data to store 
cookie.Value = expires.ToString(); 

HttpContext.Current.Response.Cookies.Set(cookie); 
+2

很好的回答,雖然它不初始化到期日不只是ASP.NET - 一般來說,一個餅乾到期日是「只寫」,並沒有公佈在http請求的Web服務器。 – maxp 2012-04-17 16:34:47

+0

對於我來說,雖然在服務器端的cookie過期值不顯示上次設定值,但瀏覽器中存儲的正確值,即使我剛剛更新cookie的值,而不是到期。 – 2013-05-24 09:02:28

+0

@mrbengi此帖與cookies有關。您發佈了一個關於DateTime解析如何工作的新問題。有很多來源可以找到幫助,或者通過StackOverflow頁面右上角的鏈接提出新問題。但是您的評論不適用於此主題。 – 2017-01-17 16:22:32