加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在MVC中没有持久化Cookie

发布时间:2020-12-16 07:07:40 所属栏目:asp.Net 来源:网络整理
导读:我遇到一个问题,我设置的cookie在调用RedirectToAction()后直接丢失.幕后发生的事情是否使当前请求无效并创建一个新的cookie,导致cookie在被保存到磁盘之前丢失? 我知道如果您希望在重定向之后数据可用,则需要使用TempData,但Cookie是否相同?如果是这样,那
我遇到一个问题,我设置的cookie在调用RedirectToAction()后直接丢失.幕后发生的事情是否使当前请求无效并创建一个新的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();
    }

解决方法

原因

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

是不行的是它设置过去的过期cookie(至少对我而言).

当我将其更改为时,它可以工作

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

将cookie expires属性设置为过去将删除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();
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读