2009-11-04 59 views
4

設置cookie時,我看到一個古怪的東西...的HttpCookie用過期集返回DateTime.MinValue

操作:

string cookieName = "foo"; 
string cookieValue = "bar"; 

//Set a cookie in the response, along with the Expires. 
this.ControllerContext.HttpContext.Response.Cookies.Add(
    new HttpCookie(cookieName, cookieValue) 
    { 
    Expires = DateTime.Now.AddHours(1) 
    } 
); 

調試時,我可以看到這個新的Cookie有在未來的一小時,但的到期,當我看到在視圖中的cookie,到期不存在...

查看:

<%= Request.Cookies.Get("foo").Value %> 

退貨bar

<%= Request.Cookies.Get("foo").Expires %> 

返回01/01/0001 00:00:00

任何想法?

回答

13

您正在查看的請求 - 它不包含到期時間。服務器告訴客戶cookie何時應該過期;客戶端也不需要告訴服務器:)

+0

Response.Cookies中沒有任何內容。 – 2009-11-04 22:05:09

+0

這是不是很清楚發生了什麼事情。您正在設置Cookie - 您是在接下來的請求中檢查它們嗎?除非您添加它們,否則我不會期望Response.Cookies中的任何內容。 – 2009-11-04 22:06:26

+0

我的行動基本上是一個SetEnvironmentMode行動。在這個動作中,Cookie被設置,並返回一個RedirectToAction到GetEnvironmentMode。 – 2009-11-04 22:08:05

3

Response.Cookies是與Request.Cookies完全不同的東西。

1

兩件事:第一個,如果您在將響應推送到客戶端之前查看請求,那麼請求將不會有您的更新。

第二個,如果您要設置一個cookie,然後使用Response.Redirect,您的cookie值可能沒有被推送到客戶端。在封面Response.Redirect調用「Thread.Abort()」,這是殺死線程。

+0

嗯,這是MVC,我正在做一個RedirectToAction。 – 2009-11-04 22:00:47

+0

@DanAtkinson你有沒有解決你的問題?我有類似的情況。你可以幫我嗎? – 2017-05-26 16:44:50

+0

@AbhishekB。請參閱接受的答案。 – 2017-05-26 16:45:38