【问题标题】:HttpCookie with Expires set returns DateTime.MinValue设置了 Expires 的 HttpCookie 返回 DateTime.MinValue
【发布时间】:2010-12-13 05:03:23
【问题描述】:

我在设置 cookie 时看到了一些奇怪的东西...

行动:

string cookieName = "foo";
string cookieValue = "bar";

//Set a cookie in the response, along with the Expires.
this.ControllerContext.HttpContext.Response.Cookies.Add(
  new HttpCookie(cookieName, cookieValue)
  {
    Expires = DateTime.Now.AddHours(1)
  }
);

调试时,我可以看到这个新的 cookie 将在未来一小时到期,然而,当我在视图中查看 cookie 时,到期时间不存在......

查看:

<%= Request.Cookies.Get("foo").Value %>

返回bar

<%= Request.Cookies.Get("foo").Expires %>

返回01/01/0001 00:00:00

有什么想法吗?!

【问题讨论】:

    标签: c# asp.net-mvc cookies


    【解决方案1】:

    您正在查看 request - 它不包含到期时间。服务器告诉客户端 cookie 什么时候过期;客户端也不需要告诉服务器:)

    【讨论】:

    • Response.Cookies 中没有任何内容。
    • 目前还不是很清楚发生了什么。您正在设置 cookie - 然后在下一个请求中检查它们吗?除非您添加它们,否则我不会期望 Response.Cookies 中有任何内容。
    • 我的动作基本上是一个 SetEnvironmentMode 动作。在这个动作中,cookie 被设置,并返回一个 RedirectToAction 给 GetEnvironmentMode。
    • 我在这里看到了我的问题,我明白你在说什么。我试图做的是有一个到期时间(有效),而且,在我的 GetEnvironmentMode 视图中,向用户显示该 cookie 到期前还剩下多长时间。
    • 恐怕您必须在 cookie 值中包含一些内容才能记住这一点。
    【解决方案2】:

    Response.CookiesRequest.Cookies 完全不同。

    【讨论】:

      【解决方案3】:

      两件事:第一,如果您在响应被推送到客户端之前查看请求,那么请求将不会有您的更新。

      第二,如果您设置了 cookie,然后使用了 Response.Redirect,您的 cookie 值可能还没有被推送到客户端。在幕后 Response.Redirect 调用“Thread.Abort()”,这会杀死线程。

      【讨论】:

      • 嗯,它是 MVC,我正在做一个 RedirectToAction。
      • @DanAtkinson 你解决了你的问题吗?我有类似的情况。你能帮帮我吗?
      • @DanAtkinson 我看到了。我关心的是管理记住我。如果 auth cookie 在过期时间内不起作用,那么如何管理它?请分享你的想法。
      • @AbhishekB。使用响应对象。如果这不是您的答案,那么我建议您提出一个新问题,而不是将其标记为对我 8 年前提出的问题的评论。 :)
      • @DanAtkinson 对。我问。等待答案和解决方案...谢谢
      猜你喜欢
      • 1970-01-01
      • 2018-05-26
      • 2016-12-23
      • 2013-08-13
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多