我想在我的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吗?
答案 0 :(得分:0)
您没有提供更新Cookie的代码,但每次更新时都会创建一个新Cookie。阅读Change a cookie value of a cookie that already exists和MSDN。这两个链接都有示例代码,用于检查cookie是否存在,并在最后更改到期时间。