为什么从HttpCookieCollection返回过期的cookie?

时间:2017-01-21 10:43:19

标签: c# asp.net .net cookies

我想在我的ASP.Net项目中使用cookies。我设置的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时,我基本上只是做一个get,修改有问题的属性,然后设置。现在,我注意到,当我更新cookie时,.Net将使用相同的名称向cookieCollection添加一个新的cookie,并将旧的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。所以,当我尝试做一个get:

var cookie = cookieCollection[name].Value;

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

.Net中的cookie更新是从Ajax调用触发的。它可以在同一个.Net方法中多次更新cookie。

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

var cookie = cookieCollection[name].Value;

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

1 个答案:

答案 0 :(得分:0)

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