我遇到的问题是,在调用RedirectToAction()之后,我设置的cookie会直接丢失。幕后发生的事情是否使当前请求无效并创建一个新的cookie,导致cookie在被保存到磁盘之前丢失?
据我所知,如果您希望重定向后数据可用,则需要使用TempData,但Cookie是否相同?如果是这样,那么将cookie值存储在TempData中然后再写入cookie是不是很难看?
更新
我刚刚意识到cookie在请求结束时丢失了,如果我调用RedirectToAction()并不重要。所以现在问题是为什么cookie不会持续两个请求? (我更新下面的代码以显示我现在正在做的事情)
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();
}
答案 0 :(得分: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();
}
答案 1 :(得分:2)
看看这篇文章。它应该解决你的问题!
var newCookie = new HttpCookie("myCookie", cookieValue);
newCookie.Expires = DateTime.Now.AddDays(10);
Response.AppendCookie(newCookie);
return RedirectToAction("Index");
答案 2 :(得分:0)
这是一个用于设置cookie和到期日期的内容
Response.Cookies.Add(new HttpCookie("myCookie", "cookie value")
{ Expires = DateTime.Now.AddDays(1)});