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