gpt4 book ai didi

asp.net-mvc - Cookie 未保留在 MVC 中

转载 作者:行者123 更新时间:2023-12-02 07:59:32 26 4
gpt4 key购买 nike

我遇到一个问题,在调用 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 操作以包含以下代码。我第一次点击 View 时,“Cookie Not Found”按预期打印。但是,随后每次都会打印相同的消息。如果我删除设置到期日期的行,那么一切都会正常工作。我想这里真正的问题是为什么使 cookie 持久化会导致浏览器将其丢弃?在 MVC 中是否有让 cookie 持久化的技巧?

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

关于asp.net-mvc - Cookie 未保留在 MVC 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1064921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com