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.Net Identity 的情况下使用 MVC 5 提供的 cookie 身份验证吗?