2009-06-30 72 views
5

我遇到了一個問題,即在調用RedirectToAction()後,我設置的Cookie正在直接丟失。在幕後發生了什麼事情會使當前請求無效,並創建一個新的cookie,使cookie在被保存到磁盤之前丟失?Cookie未被保存在MVC中

據我所知,如果您希望數據在重定向後可用,您需要使用TempData,但是對於cookie來說是一樣的嗎?如果是這樣,難道不需要將Cookie值存儲在TempData中,然後再寫入cookie?

更新:

我才意識到該cookie是在請求結束丟失,如果我叫RedirectToAction沒關係()。所以現在的問題是爲什麼不cookie的持續accros兩個要求? (我更新的代碼下面展示一下我現在所做的)

public ActionResult DoSomething() 
{ 
    Response.Cookies["SomeCookie"].Value = "Jarified"; 
    Response.Cookies["SomeCookie"].Expires = DateTime.UtcNow.AddDays(3); 

    return View("SomeView"); 

} 

更新

我創建使用默認模板創建一個新的MVC項目。我修改了HomeController/Index操作以獲得下面的代碼。第一次按預期打印「未找到Cookie」視圖。但是,每隔一段時間打印相同的消息。如果我刪除設置到期日期的行,那麼一切正常。我想這裏真正的問題是爲什麼使cookie持久化導致瀏覽器丟棄它?有沒有把cookie存在於MVC中的技巧?

public ActionResult Index() 
    { 
     HttpCookie cookie = Request.Cookies["temp"]; 
     if (cookie == null) 
     { 
      ViewData["Message"] = "Cookie Not Found"; 
      Response.Cookies["temp"].Value = "Welcome to ASP.NET MVC!"; 
      Response.Cookies["temp"].Expires = DateTime.UtcNow; 
     } 
     else 
     { 
      ViewData["Message"] = cookie.Value; 
     } 
     return View(); 
    } 

回答

5

之所以

Response.Cookies["temp"].Expires = DateTime.UtcNow; 

不工作是,它設置一個cookie與過去(至少對我來說)到期。

它的工作原理,當我將其更改爲

Response.Cookies["temp"].Expires = DateTime.UtcNow.AddDays(3); 

設置一個cookie過期屬性過去將刪除cookie。

此代碼的工作對我來說:

public ActionResult Index() { 
     HttpCookie cookie = Request.Cookies["temp"]; 
     if (cookie == null) { 
      ViewData["Message"] = "Cookie Not Found"; 
      Response.Cookies["temp"].Value = "This is a cookie: Welcome to ASP.NET MVC!"; 
      Response.Cookies["temp"].Expires = DateTime.UtcNow.AddDays(3); 
     } else { 
      return RedirectToAction("Something"); 
     } 
     return View(); 
    } 

    public ActionResult Something() { 
     HttpCookie cookie = Request.Cookies["temp"]; 
     ViewData["Message"] = cookie.Value; 
     return View(); 
    } 
+0

昨天深夜設置cookie和到期日期,我意識到,如果我改變了第二樣品DateTime.UtcNow .AddDays(3);它正在工作。我還不清楚的是爲什麼我的第一個例子不適合我。我認爲我最初的問題是我存儲的價值 - 它不是「Jarified」,而是更長的字符串。我想知道到期日是否導致長度超過4K。感謝你的回答! – Joe 2009-07-01 14:41:44

0

這裏有一個襯裏

Response.Cookies.Add(new HttpCookie("myCookie", "cookie value") 
    { Expires = DateTime.Now.AddDays(1)});