Cookie不会保留在MVC中

时间:2009-06-30 17:22:45

标签: asp.net-mvc debugging

我遇到的问题是,在调用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();
    }

3 个答案:

答案 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)

看看这篇文章。它应该解决你的问题!

http://stephenwalther.com/blog/archive/2008/07/08/asp-net-mvc-tip-15-pass-browser-cookies-and-server-variables-as-action-parameters.aspx

    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)});