如何创建持久性cookie与非持久性cookie?

问题描述:

我似乎无法弄清楚如何创建一个持久性的cookie与非持久性cookie。他们在发回的HTTP头中有什么不同?如何创建持久性cookie与非持久性cookie?

Cookie有一个到期日期隐式或显式设置,控制它们持续多久(受用户代理实际执行)。 Cookie只能在会话期间(或更短的时间)持续存在。

如果一个cookie有效,它将与HTTP请求一起传递到它所源自的域。只有设置cookie的域才可以读取cookie(尽管有许多方法可以利用此功能,例如跨站点脚本)。

  • 如果你想有一个cookie来在特定时间到期,使用客户端或您选择的服务器端语言设置它的到期日期 。

  • 如果您希望Cookie在会话结束时过期,请不要设置 到期日期。

From the RFC (emphasis mine):

该Cookie设置器可以指定一个 删除日期,在这种情况下 cookie将在该日期被去除。

如果cookie设置器未指定日期,则在用户退出其浏览器后删除cookie。

因此,指定日期是 使Cookie在整个 会话期间生存的一种方式。 因此,带有过期日期的Cookie 被称为 持久性。

作为一个示例应用程序, 一个购物网站可以使用持久 Cookie存储用户 放置在其篮中的物品。 (在现实中, cookie的可参考的条目存储在购物网站 数据库, 不是您的计算机上。)这样,如果 用户放弃他们的浏览器,而 进行购买,稍后再回来, 他们仍然找到 购物篮中的相同商品,以便他们不必再次查找 这些商品。如果这些Cookie 未提供到期日期,则 将在浏览器关闭 时终止,并且有关 购物篮内容的信息将丢失。

+0

如果我只想让cookie保持会话,我应该设置什么过期时间? – 2010-10-06 17:53:54

+0

请参阅我的编辑。 – 2010-10-06 18:34:40

+0

谢谢!这是否意味着任何没有expires子句的Set-Cookie都将是一个会话cookie,并且一旦浏览器重新启动就会丢失?因为这不是我所看到的......一旦我没有过期地执行Set-Cookie,并重新启动浏览器,我仍然可以读取该cookie。这是预期的吗? – 2010-10-06 19:00:43

会话cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue"); 
Response.Cookies.Add(cookie); 

饼干具有一定时间戳(.NET DateTime library

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue"); 
cookie.Expires = DateTime.Today.AddMonths(12); //or AddMinutes, or AddHours... 
Response.Cookies.Add(cookie); 

持久Cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue"); 
cookie.Expires = DateTime.MaxValue; 
Response.Cookies.Add(cookie); 

有两种类型在ASP.NET饼干

持久性曲奇:

曲奇存储在您的计算机硬盘上。它们保留在硬盘上,可以通过网络服务器访问,直到它们被删除或过期。

public void SetPersistentCookies(string name, string value) 
{ 
    HttpCookie cookie = new HttpCookie(name); 

    cookie.Value = value; 

    cookie.Expires = Convert.ToDateTime(“12/12/2008″); 

    Response.Cookies.Add(cookie); 
} 

非持久性饼干:你的网络浏览器运行时

Cookies只会保存。只有在关闭浏览器之前,它们才能被Web服务器使用。它们不保存在磁盘上。

public void SetNonPersistentCookies(string name, string value) 
{ 
    HttpCookie cookie = new HttpCookie(name); 

    cookie.Value = value; 

    Response.Cookies.Add(cookie); 
}