ASP MVC Cookie 不持久

Posted

技术标签:

【中文标题】ASP MVC Cookie 不持久【英文标题】:ASP MVC Cookies not persisting 【发布时间】:2010-10-02 04:35:24 【问题描述】:

我有一个 ASP MVC 应用程序,其中包含一些看似简单的代码来保存和检索 cookie,但由于某种原因它们不会持续存在。控制器中的代码是:

if (System.Web.HttpContext.Current.Response.Cookies["CountryPreference"] == null)

    HttpCookie cookie = new HttpCookie("CountryPreference");
    cookie.Value = country;
    cookie.Expires = DateTime.Now.AddYears(1);
    System.Web.HttpContext.Current.Response.Cookies.Add(cookie);

然后再次加载:

if (System.Web.HttpContext.Current.Request.Cookies["CountryPreference"] != null)

    System.Web.HttpContext.Current.Request.Cookies["CountryPreference"].Expires = DateTime.Now.AddYears(1);
    data.Country = System.Web.HttpContext.Current.Request.Cookies["CountryPreference"].Value;

由于某种原因,cookie 始终为空?

【问题讨论】:

当您使用 FireBug 或类似的东西检查请求和响应时,cookie 是否存在? 【参考方案1】:

问题出在以下代码:

if (System.Web.HttpContext.Current.Response.Cookies["CountryPreference"] == null)

当您尝试使用 Response 对象而不是 Request 来检查 cookie 的存在时,ASP.net 会自动创建一个 cookie。

在此处查看此详细帖子:http://chwe.at/blog/post/2009/01/26/Done28099t-use-ResponseCookiesstring-to-check-if-a-cookie-exists!.aspx


引用文章中的内容以防链接再次断开......

简短的解释,如果你不这样做 喜欢阅读整个故事

如果你使用类似“如果 (Response.Cookies[“mycookie”] != null) ... ”,ASP.Net 自动 生成一个名为的新 cookie “mycookie”在后台和 覆盖你的旧饼干!始终使用 要读取的 Request.Cookies-Collection 饼干!

[More detail in the article]

【讨论】:

我很久以前就 +1 了,但我不得不说这是微软在 .NET 中做过的最愚蠢的 API 决定之一。 iv'e 遇到了同样的问题,我只使用请求来读取 cookie ***.com/questions/7510327/… 我知道在创建 cookie 时最好不要使用请求而不是响应,但由于某种原因,在获取它时,我必须复制并粘贴并将其作为响应 - 所以我的 cookie 不会持续存在第一个页面加载。谢谢! 嗯...这种行为可以用来故意删除现有的cookie吗?【参考方案2】:

在简历中,不要使用“Response”来读取 cookie,使用“Request”。

【讨论】:

以上是关于ASP MVC Cookie 不持久的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET Core 1.1 MVC 迁移到 2.0 后,自定义 cookie 身份验证不起作用

经典 ASP 中的持久 Cookie

我们可以在不使用 ASP.Net Identity 的情况下使用 MVC 5 提供的 cookie 身份验证吗?

ASP.NET Core MVC:设置身份 cookie 过期

拒绝访问持久性 cookie

ASP.NET Mvc Api:设置 cookie 然后 302/303 重定向丢失 cookie