目前有以下几种Cookie规范:
* Netscape cookie草案:是最早的cookie规范,基于rfc2109。尽管这个规范与rc2109有较大的差别,但是很多服务器都与之兼容。
* rfc2109, 是w3c发布的第一个官方cookie规范。理论上讲,所有的服务器在处理cookie(版本1)时,都要遵循此规范。遗憾的是,这个规范太严格了,以致很多服务器不正确的实施了该规范或仍在使用Netscape规范。
* rfc2965规范定义了cookie版本2,并说明了cookie版本1的不足。
rfc2965规范的使用,目前并不多。rfc2109规范相应要严格得多,在实际应用上,并不是所有的浏览器和Web服务器都严格遵守。因此相比较而言,Netscape cookie草案倒是一个比较简洁和被广泛支持的Cookie规范,因此我们在这里以Netscape cookie草案为基础进行讨论,对于其他两种规范,我们的讨论和代码具有相同的意义。关于Netscape cookie草案的细节,大家可以参照Netscape官方站点,这里我们列举一些和我们讨论有关的内容。
根据Netscape cookie草案的描述,Cookie 是Web 服务器向用户的浏览器发送的一段ASCII码文本。一旦收到Cookie,浏览器会把Cookie的信息片断以"名/值"对(name-value pairs)的形式储存保存在本地。这以后,每当向同一个Web 服务器请求一个新的文档时,Web 浏览器都会发送之站点以前存储在本地的Cookie。创建Cookie的最初目的是想让Web服务器能够通过多个HTTP请求追踪客户。有些复杂的网络应用需要在不同的网页之间保持一致,它们需要这种会话状态的保持能力。
浏览器与Web服务器通过HTTP协议进行通讯,而Cookie就是保存在HTTP协议的请求或者应答头部(在HTTP协议中,数据包括两部分,一部分是头部,由一些名值对构成,用来描述要被传输数据的一些信息。一部分是主体(body),是真正的数据(如HTML页面等))进行传送的。
在HTML文档被发送之前,Web服务器通过传送HTTP 包头中的Set-Cookie 消息把一个cookie 发送到用户的浏览器中。下面是一个遵循Netscape cookie草案的完整的Set-Cookie 头:
Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com;
expires= Wednesday, 19-OCT-05 23:12:40 GMT; [secure]
Set-Cookie的每个属性解释如下:
* Customer=huangxp 一个"名称=值"对,把名称customer设置为值"huangxp",这个属性在Cookie中必须有。
* path=/foo 控制哪些访问能够触发cookie 的发送。如果没有指定path,cookie 会在所有对此站点的HTTP 传送时发送。如果path=/directory,只有访问/directory 下面的网页时,cookie才被发送。在这个例子中,用户在访问目录/foo下的内容时,浏览器将发送此cookie。如果指定了path,但是path与当前访问的url不符,则此cookie将被忽略。
* domain=.ibm.com 指定cookie被发送到哪台计算机上。正常情况下,cookie只被送回最初向用户发送cookie 的计算机。在这个例子中,cookie 会被发送到任何在.ibm.com域中的主机。如果domain 被设为空,domain 就被设置为和提供cookie 的Web 服务器相同。如果domain不为空,并且它的值又和提供cookie的Web服务器域名不符,这个Cookie将被忽略。
* expires= Wednesday, 19-OCT-05 23:12:40 GMT 指定cookie 失效的时间。如果没有指定失效时间,这个cookie 就不会被写入计算机的硬盘上,并且只持续到这次会话结束。
* secure 如果secure 这个词被作为Set-Cookie 头的一部分,那么cookie 只能通过安全通道传输(目前即SSL通道)。否则,浏览器将忽略此Cookie。
一旦浏览器接收了cookie,这个cookie和对远端Web服务器的连续请求将一起被浏览器发送。例如 前一个cookie 被存入浏览器并且浏览器试图请求URLhttp://www.ibm.com/foo/index.html时,下面的HTTP 包头就被发送到远端的Web服务器。
GET /foo/index.html HTTP/1.0
Cookie:customer=huangxp
Cookie的关键字介绍:
version -- Cookie的版本号,现有的Cookie有Netscape cookie, rfc2109($Version=1),rfc2965($Version=2).
domain -- 域名,规范来说,是不区分端口号的
path -- 路径,请求的URL中包含这类路径下的所有cookie都应该发送
expires -- 过期时间,标准的HTTP GMT标准时间格式。
max-age -- 过期时间,相对的时间格式,比如3600,表示接受到cookie的时间+3600秒,单位是秒。
HttpOnly -- 好像是IE的遗留问题。
Cookie 语法规则
服务器端:
set-cookie = "Set-Cookie:" cookies
cookies = 1#cookie
cookie = NAME "=" VALUE *(";" cookie-av)
NAME = attr
VALUE = value
cookie-av = "Comment" "=" value
| "Domain" "=" value
| "Max-Age" "=" value
| "Path" "=" value
| "Secure"
| "Version" "=" 1*DIGIT
客户端:
cookie = "Cookie:" cookie-version
1*((";" | ",") cookie-value)
cookie-value = NAME "=" VALUE [";" path] [";" domain]
cookie-version = "$Version" "=" value
NAME = attr
VALUE = value
path = "$Path" "=" value
domain = "$Domain" "=" value
分享到:
相关推荐
今天用JS实现了cookie的读取删,其实最核心的东西就是一个:document.cookie,这就足已显示JS的灵活性了,当你用document.cookie=xxxxxx的时候,相当于是生成一个cookie,当你直接var cookie = document.cookie的...
ie cookie 查看 修改 ie cookie 查看 修改 好东西吧算是
某培训机构网课,平平淡淡,入门级别的东西
Session、 Cookie 、 Token令牌的关系。 以及Cookie的局限性
好东西,web开发必要的小工具,可直接导出cookie。
很全的php控制cookie的方法,我以前没有接触过这方面的东西,后来通过一个项目总结的。
有关Cookie与Session机制详细说明。好东西
可以双开网页用不同 的cookie 进行登陆! 是个相当不错的东西哟!
Cookie横幅Cookie横幅
很全的js控制cookie的方法,我以前没有接触过这方面的东西,后来通过一个项目总结的。
本文实例讲述了Python Web框架之Django框架cookie和session用法。分享给大家供大家参考,具体如下: part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话。 两者...
最近觉得cookie,是一个非常有用的东西,所以写了一些基本用法和例子上传到这里,供大家交流学习
现在到了ASP.NET CORE的时代,但是ASP.NET CORE中没有FormsAuthentication这个东西,那么怎么做身份认证呢?答案是ASP.NET CORE已经为我们内置了Cookie身份认证的功能,而且使用起来非常方便,注意本文是基于ASP.NET...
就是这个东西有着很多程序的自动化工作止步,让人懊恼不已。 Cookies提取助手的出现,可以通过手工输入验证码,免去程序实现验证码识别的繁琐实现,提取有效可用的Cookie,提供给爬虫抓取程序,实现免验证码爬取。 ...
本文章记录本人在学习 Cookie 中看书理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习。 封装函数 在默认的情况下存取Cookie是一件比较麻烦的事情。由于Cookie是通过字符串来存储信息的,所以容易导致...
用JS设置、读取、删除cookie。经过测验和优化的代码,可以根据个人需求稍作改动,即可使用。好东西,和大家一起分享。
所以我们在学习一个东西的时候,一定要做到知其然知其所以然。 HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息)。客户端向服务器发起请求,如果服务器需要...
主要是运用了原生js封装了一个cookie,然后使用了三个事件做拖拽,分别是onmousedown,onmousemove,onmouseup,这三个事件其中两个需要添加事件对象,也就是event,事件对象是一个不兼容的东西,所以需要处理兼容性...
Pusheen饼干吃游戏 为“开发我的星球”课程的开发者联盟小学生准备的快速展示项目,展示了一个使用Javascript的小例子。 项目技术时间表: setInterval最初用于计时Pusheens进餐。... 动画一些东西。
排球曲奇使用截击保存 cookie 的示例1 - 将volley.jar从 libs 路径导入到您的项目2 - 在 build.gradle 依赖项中导入compile group: 'org.apache.... 我只需要这样的东西,我从 stackoverflow 写了一些代码。