【问题标题】:Why is the expired cookie returned from HttpCookieCollection?为什么 HttpCookieCollection 会返回过期的 cookie?
【发布时间】:2017-06-06 07:28:45
【问题描述】:

我想在我的 ASP.Net 项目中使用 cookie。我这样设置的 cookie:

HttpCookie cookie = new HttpCookie(name);
cookie.Expires = DateTime.Now.AddYears(1);
cookie.Value = data;
HttpContext.Current.Response.Cookies.Set(cookie)

得到:

var cookieCollection = HttpContext.Current.Request.Cookies;
var cookie = cookieCollection[name].Value;

当我更新 cookie 时,我基本上只是做一个获取,修改有问题的属性,然后设置。现在,我注意到当我更新一个 cookie 时,.Net 会在 cookieCollection 中添加一个同名的新 cookie,并将旧的设置为过期:

cookieCollection[0]
{System.Web.HttpCookie}
    Domain: null
    Expires: {01-01-0001 00:00:00}
    HasKeys: false
    HttpOnly: false
    Name: "myCookieUc"
    Path: "/"
    Secure: false
    Shareable: false
    Value: "{...}"
    Values: {...}
cookieCollection[1]
{System.Web.HttpCookie}
    Domain: null
    Expires: {21-01-2018 11:00:10}
    HasKeys: false
    HttpOnly: false
    Name: "myCookieUc"
    Path: "/"
    Secure: false
    Shareable: false
    Value: "{...}"
    Values: {...}

因此,在我最初设置和更新我的 cookie 后,我的 cookieCollection 中将有两个 cookie。因此,当我尝试获取时:

var cookie = cookieCollection[name].Value;

然后由于某种原因,我似乎得到了已经过期的cookie。

.Net 中的 cookie 更新由 Ajax 调用触发。它可能会在同一个 .Net 方法中多次更新 cookie。

所以我的问题是,当我这样做时:

var cookie = cookieCollection[name].Value;

为什么它给我过期的cookie?我可以改为使用 Linq 来获取未过期的 cookie 吗?

【问题讨论】:

    标签: c# asp.net .net cookies


    【解决方案1】:

    您没有提供更新 cookie 的代码,但听起来您每次更新 cookie 时都会创建一个新 cookie。阅读Change a cookie value of a cookie that already existsMSDN。两个链接都有示例代码,用于检查 cookie 是否存在并在最后更改过期时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多