是否可以在Web窗体应用程序中设置Cookie的最大年龄?我知道,设置Expire是有道理的,但有没有办法设定Max Age?
答案 0 :(得分:0)
Asp.Net并没有在HttpCookie上专门提供这个属性,可能是因为它们非常以微软为中心,IE不支持max-age(至少从IE11开始)
但是,你仍然可以这样做。这里有一些代码演示了使用max-age设置此cookie的正确和无效方法:
// doesn't work:
var mytestcookie = new HttpCookie("regular_httpcookie", "01");
mytestcookie.Values.Add("max-age", "300");
Response.Cookies.Add(mytestcookie);
// *does* work:
Response.Headers.Add("set-cookie", "testingmaxage=01;max-age=300; path=/");
它在HTTP响应中呈现如下:
Set-Cookie testingmaxage=01;max-age=300; path=/
X-AspNet-Version 4.0.30319
Set-Cookie regular_httpcookie=01&max-age=300; expires=Fri, 10-Jun-2016 15:02:15 GMT; path=/
如上所示,如果你还使用HttpCookie设置cookie,这将创建第二个" set-cookie"响应中的标题,但浏览器不会介意,它只会将其添加到Cookie列表中。
我在IE11和Chrome上测试过这是一个非问题 - 只要它们有不同的名称,cookie就会全部进入。 如果 cookie名称与已在HttpCookies中设置的名称冲突,则最后一个名称为wins。查看HTTP响应的文本以查看最后一个。 (最好只是确保他们不会发生冲突)
正如我在开始时提到的,在IE11上进行测试时,我注意到它忽略了cookie的max-age属性。这是解决该问题的方法的链接: Set-Cookie: Expire property, clock skew and Internet Explorer issue