2015-12-03 56 views
1

是否可以在Web窗体应用程序中为Cookie设置最大年龄?我知道,这是设置过期的okey,但是有没有设置Max Age的方法?Web形式中的Cookie最大年龄

+0

我不确定它们有什么区别。 – wazz

+0

Max Age是什么意思?这个术语通常与缓存相关。 – wazz

+1

@wazz cookies也可以具有此属性,并且在服务器和客户端上的时间不同时这很有用,因为在max-age的情况下,与expire不同,它们的到期日期将与客户端时间无关 –

回答

0

Asp.Net没有明确规定这个属性上的HttpCookie,可能是因为他们是非常微软为中心的,而IE不支持max-age的(如至少,作为IE11的)

但是,仍然可以做到这一点。下面是一些代码演示正确的和无效的方式来设置此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进行了测试,这是一个非问题 - 只要它们有不同的名称,cookies就会全部进入。 如果的cookie名称与已经在HttpCookies中设置的cookie名称冲突,这是最后一次获胜。查看您的HTTP响应文本以查看哪一个进入最后。 (尽量确保它们不冲突)

正如我在开始时提到的,在测试IE11时,我注意到它忽略了cookie的max-age属性。以下是解决该问题的方法的链接: Set-Cookie: Expire property, clock skew and Internet Explorer issue