首页 > 代码库 > Cookies
Cookies
cookie分为会话cookie和持久cookie。
会话cookie:临时cookie,记录了用户访问站点时的设置和偏好,用户退出浏览器时,会话cookie就被删除。持久cookie:存储在硬盘上,浏览器退出,计算机重启时它们任然存在。
cookie的工作原理
浏览器的cookie
站点和cookie关联
域属性
路径属性
cookie首部
cookie版本0
属性:NAME=VALUE
是否强制:是
描述:NAME和VALUE都是字符序列,Web服务器可以创建任意的NAME=VALUE关联,在后继对站点的访问中会将其送回给Web服务器
属性:Expires
是否强制:否
描述:cookie的有效日期,如果没有指定Expires,cookie就会在用户会话结束时过期
属性:Domain
是否强制:否
描述:见“站点和cookie关联”
属性:Path
是否强制:否
描述:见“站点和cookie关联”
属性:Secure
是否强制:否
描述:如果包含这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie
客户端发送请求时,会将所有与域、路径和安全过滤器相匹配的未过期cookie都发送给这个站点:
cookie版本1
会话cookie:临时cookie,记录了用户访问站点时的设置和偏好,用户退出浏览器时,会话cookie就被删除。持久cookie:存储在硬盘上,浏览器退出,计算机重启时它们任然存在。
会话cookie和持久cookie的唯一区别就是它们的过期时间。
cookie的工作原理
用户首次访问Web站点时,Web服务器会给用户指定一个独有的cookie,这样当用户再次访问该站点时就可以识别出这个用户了。
客户端发起请求:
客户端发起请求:
GET /index.html HTTP/1.0 Host: www.joes-hardware.com服务器响应,并带上cookie信息:
HTTP/1.0 200 OK Set-cookie: id="34294";domain="joes-hardware.com" Content-type: text/html Content-length: 1903 ...浏览器会记住从服务器返回的Set-cookie或Set-cookie2首部中的cookie内容,并将cookie集存储在浏览器的cookie数据库中。当客户端再次访问同一站点时,浏览器会挑中那个服务器贴到用户上的cookie,并在一个cookie请求首部中将其传回去:
GET /index.html HTTP/1.0 Host: www.joes-hardware.com Cookie: id="34294"
浏览器的cookie
浏览器要负责存储cookie信息,并在每次访问服务器时将这些信息提供给它,不同的浏览器以不同的方式来存储cookie。
下面以Internet Explorer的cookie为例。
IE的Cookie可以通过下面的方式查看到:在IE图标点击右键,打开右键菜单,打开属性对话框,打开“常规->浏览历史记录->设置”,点击“Intenet临时文件->查看文件”,就可以打开cookie存储的目录,该目录下以“cookie:”开头的文件就是IE保存的cookie文件。
每个文件中包含了多个cookie信息,每个cookie的格式如下:
下面以Internet Explorer的cookie为例。
IE的Cookie可以通过下面的方式查看到:在IE图标点击右键,打开右键菜单,打开属性对话框,打开“常规->浏览历史记录->设置”,点击“Intenet临时文件->查看文件”,就可以打开cookie存储的目录,该目录下以“cookie:”开头的文件就是IE保存的cookie文件。
每个文件中包含了多个cookie信息,每个cookie的格式如下:
__utma 81379588.14306528498.1377831180.1418116396.1418271853.95 book.douban.com/ 160 395949120 30560825 4211534380 30414064第一行是cookie的变量名,下一行是变量的值,第三行是域和路径,剩下的行就是一些特有的数据。
站点和cookie关联
cookie中提供了属性用于将cookie匹配到不同的站点,包括域属性和路径属性。
域属性
域属性(Domain)用于控制哪些站点可以看到那个cookie,在HTTP的响应首部Set-cookie中指定:
Set-cookie: user="mary17"; domain="airtravelbargains.com"这里的domain属性是告诉浏览器将cookie: user="mary17"发送给域".airtravelbargains.com"中的所有站点。
路径属性
路径属性允许用户将cookie与部分Web站点关联起来。
Set-cookie: pref=compact; domain="airtravelbargains.com";path=/autos/这样浏览器只有访问域".airtravelbargains.com"中的站点,并且访问的路径中包含/autos/时才会将cookie: pref=compact;发送过去。
cookie首部
cookie规范目前有两个版本,版本0和版本1,版本1是对版本0的扩展,版本0使用的更广。
cookie版本0
服务端响应的Set-cookie一般看起来如下:
Set-cookie: name=vaule[; expires=date][; path=path][; domain=domain][; secure]下面看每个属性的含义。
属性:NAME=VALUE
是否强制:是
描述:NAME和VALUE都是字符序列,Web服务器可以创建任意的NAME=VALUE关联,在后继对站点的访问中会将其送回给Web服务器
属性:Expires
是否强制:否
描述:cookie的有效日期,如果没有指定Expires,cookie就会在用户会话结束时过期
属性:Domain
是否强制:否
描述:见“站点和cookie关联”
属性:Path
是否强制:否
描述:见“站点和cookie关联”
属性:Secure
是否强制:否
描述:如果包含这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie
客户端发送请求时,会将所有与域、路径和安全过滤器相匹配的未过期cookie都发送给这个站点:
Cookie: session-id=002-1145265-8016838; session-id-time=1007884800
cookie版本1
cookie版本1(RFC 2965)引入了Set-cookie2首部和Cookie2首部。Set-cookie2首部的属性包括:
属性:NAME=VALUE
是否强制:是
描述:NAME和VALUE都是字符序列,Web服务器可以创建任意的NAME=VALUE关联,在后继对站点的访问中会将其送回给Web服务器
属性:Version
是否强制:是
描述:值为1,表示cookie规范的版本
属性:Comment
是否强制:否
描述:用于说明服务器准备如何使用这个cookie,这个值必须采用UTF-8编码
属性:CommentURL
是否强制:否
描述:提供一个URL指针,指向详细描述了cookie的目地及策略的文档
属性:Discard
是否强制:否
描述:如果提供该属性,在客户端程序终止时将放弃这个cookie
属性:Domain
是否强制:否
描述:见“站点和cookie关联”
属性:Max-age
是否强制:否
描述:整数,设置以秒为单位的cookie生存期,当cookie的试用期超过了Max-age时,客户端就应该将这个cookie丢弃,如果Max-age值为0,则应该立即将这个cookie丢弃
属性:Path
是否强制:否
描述:见“站点和cookie关联”
属性:Port
是否强制:否
描述:一个或者多个端口,由逗号分隔(Port="80,81,8080"),表示只能向端口与端口列表中的端口相匹配的服务器提供cookie,如果值为空,则只能向当前响应服务器的端口号提供cookie
属性:Secure
是否强制:否
描述:如果包含这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie
版本1的客户端会带回与传送的每个cookie相关的附加信息。客户端发起请求时,可以以Cookie2首部告知服务器自己所支持的cookie标准版本:
属性:NAME=VALUE
是否强制:是
描述:NAME和VALUE都是字符序列,Web服务器可以创建任意的NAME=VALUE关联,在后继对站点的访问中会将其送回给Web服务器
属性:Version
是否强制:是
描述:值为1,表示cookie规范的版本
属性:Comment
是否强制:否
描述:用于说明服务器准备如何使用这个cookie,这个值必须采用UTF-8编码
属性:CommentURL
是否强制:否
描述:提供一个URL指针,指向详细描述了cookie的目地及策略的文档
属性:Discard
是否强制:否
描述:如果提供该属性,在客户端程序终止时将放弃这个cookie
属性:Domain
是否强制:否
描述:见“站点和cookie关联”
属性:Max-age
是否强制:否
描述:整数,设置以秒为单位的cookie生存期,当cookie的试用期超过了Max-age时,客户端就应该将这个cookie丢弃,如果Max-age值为0,则应该立即将这个cookie丢弃
属性:Path
是否强制:否
描述:见“站点和cookie关联”
属性:Port
是否强制:否
描述:一个或者多个端口,由逗号分隔(Port="80,81,8080"),表示只能向端口与端口列表中的端口相匹配的服务器提供cookie,如果值为空,则只能向当前响应服务器的端口号提供cookie
属性:Secure
是否强制:否
描述:如果包含这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie
版本1的客户端会带回与传送的每个cookie相关的附加信息。客户端发起请求时,可以以Cookie2首部告知服务器自己所支持的cookie标准版本:
Cookie2: $Version="1"如果服务器能够识别出Cookie2首部,就会在响应首部中发送Set-cookie2(而不是Set-cookie)。
Cookies
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。