Cookie是有Netscape浏览器1.0版引入的。Netscape 的开发人员发明了Cookie。
1. Cookie 是如何工作的?
Web服务器创建一个Cookie时,一个附加的HTTP头部在浏览器显示页面时被发送到浏览器。 HTTP头部类似如下形式:
Set-Cookie:message=Hello
Set-Cookie头部使得浏览器创建一个名为message的Cookie ,其值为Hello.
在浏览器创建Cookie后,它从相同的应用程序请求页面时,都将像下面这样发送这个HTTP头部:
Cookie:message=Hello
Cookie头部包含所有的Web服务器设置的Cookie。每次浏览器向Web服务器请求页面时,这些Cookie都会发送回服务器。
注意:一个Cookie就是一段文本。 Cookie只能用于存储字符串值。
我们可以创建两种类型的Cookie: 会话Cookie和持久化Cookie。
会话Cookie只存在于内存中。当用户关闭浏览器时,会话Cookie就永久消失了。
持久化Cookie可以存在不同的位置,所以Cookie是与浏览器有关的。使用IE浏览器请求页面所创建的Cookie,不存在Firefox或Opera浏览器中。
注意:IE和Firefox 浏览器都以明文形式存储Cookie。我们不应该将身份证或信用卡号码之类的敏感信息存于Cookie中。
2. Cookie的安全性限制。
Cookie会引发安全方面的问题。一个持久化Cookie时,会修改访问者电脑上的文件。
Cookie是与域名相关的。一个网站设置的Cookie,另一个网站就访问不到。浏览器创建Cookie时,会记录它所关联的域名,不会将其发送到另一个域名。
注解:Web页面中的图片可能来自另一个域名,当浏览器请求一个图片时,Cookie可能被另一个域名设置。诸如DoubleClick这样的显示并跟踪多个网站广告的公司,就利用这样的后门在多个不同的页面间跟踪并显示广告统计信息。这种类型的Cookie就称为第三方Cookie。
浏览器存储Cookie的重要限制是大小的限制。一个域名存储的Cookie总大小不能超过 4096字节。这个大小包含所有的Cookie名称和值在内。
大多数浏览器都限制可以被设置的Cookie数量,一个域名不超过20个 Cookie(IE浏览器例外)。
超过这个数目,旧的Cookie会自动删除。
注: 可以通过创建多值Cookie来超越该限制。
因为Cookie安全性方面的因素,所有的现代浏览器都给用户提供了禁用Cookie的选项。
除非在构建内网应用程序时我们需要控制每个人的浏览器,其他时候都不应该企图依赖Cookie。我们尽量只在存储非关键信息时使用Cookie。
尽管如此,Asp.net Framework 的许多部分还都以来Cookie,例如:Web部件、Forms身份验证、Session状态和匿名用户配置文件默认情况江都以来Cookie。如果你使用这些功能中的任何一个,就必须使用Cookie。