2016-03-10 65 views
1

我想更新一個cookie值,但它不起作用 - 我嘗試過的所有內容都不會更新cookie,而且我總是獲取cookie的初始值。Cookie不更新

所以我已搜查,並根據MSDN我應該可以做更新cookie中的以下內容:

HttpCookie cookie = new HttpCookie("cookiename"); 
cookie.Value = cookieValue; 
cookie.Expires = DateTime.Now.AddDays(30); 
HttpContext.Current.Response.Cookies.Set(cookie); // also just tried using .Add again here 

由於這沒有工作,我做了SO另一個搜索,人們說我應該能夠做到這一點:

HttpContext.Current.Response.Cookies["cookiename"].Value = cookieValue; 
HttpContext.Current.Response.Cookies["cookiename"].Expires = DateTime.Now.AddDays(30); 

但這並沒有工作,要麼所以我試圖刪除Cookie,並重新添加它:

HttpCookie cookie = new HttpCookie("cookiename"); 
cookie.Value = cookieValue; 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie); 

cookie.Expires = DateTime.Now.AddDays(30); 
HttpContext.Current.Response.Cookies.Add(cookie); 

我也試圖消除與前重新添加

ResponseCookies.Remove("cookiename"); 

而且這也沒有工作,下面的Cookie,所以我現在不知道什麼嘗試。有誰知道如何用c#更新cookie?

更新

如果我通過代碼,並檢查HttpContext.Current.Request.Cookies["cookiename"].Value我已經更新後,它顯示了新的價值。如果我然後回收應用程序池,以便再次從文件中讀取cookie,它會顯示原始值,因此上面的代碼似乎沒有更新物理cookie。

+0

嘗試刪除,然後將cookie添加回新值。看看是否有效。這是ajax請求嗎? –

+0

@MihirSolanki,不是ajax請求 - 否則我會使用'$ .cookie',因爲它效果更好 - 它實際上更新了cookie! – Pete

+0

由於Cookie位於用戶的計算機上,因此無法直接更新物理Cookie。瀏覽器有責任放棄cookie。 – Smartis

回答

1

您不能!

根據MSDN,您將當前Cookie替換爲具有相同名稱的新cookie。有關於此的整個部分。

修改和刪除餅乾

您不能直接修改的cookie。相反,更改Cookie包括使用新值創建新的Cookie ,然後將cookie發送到瀏覽器 覆蓋客戶端上的舊版本。


更新

在書面意見後,我們在這裏發現了這個問題。

根據specs,您也不允許在cookie值中使用分號。

該字符串是不含分號,逗號空白字符的序列。如果需要將這些數據放在名稱或 值中,則某些編碼方法(如URL風格%XX編碼)建議使用 ,但不定義或不要求編碼。

+0

我已閱讀整節,並嘗試它在該部分中所說的話(正如您可以在我的問題中看到的那樣) – Pete

+0

@Pete您是否嘗試從新Cookie更改過期日期? – Smartis

+0

@Pete您正在測試哪個瀏覽器? – Smartis