移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 互联网 -> Cookies -> 正文阅读

[互联网]Cookies

分类:互联网 标题:Cookies 网站:软件世界网
[互联网] Cookies | 软件世界网
详细内容: cookie分为会话cookie和持久cookie。
会话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的格式如下:
__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标准版本:
Cookie2: $Version="1"
如果服务器能够识别出Cookie2首部,就会在响应首部中发送Set-cookie2(而不是Set-cookie)。
上一篇文章      下一篇文章      查看所有文章
2015-01-06 23:12:22  
互联网 最新文章
C++11并发API总结
16.收款(AcceptingMoney)
数据链路层综述
IP协议及IP数据报解析
《浅谈HTTP协议》
计算机网络基础
LoadRunner和RPT之间关于手动关联和参数化的
HTTPS中的对称密钥加密,公开密钥加密,数字
上班需要打卡吗?(开通微信公众号--乘着风
ofbizjmsactivemq
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --