目前有以下几种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
分享到:
相关推荐
描述中提到的“好东西,web开发必要的小工具”,意味着这个插件是Web开发者工具箱中的一个重要组成部分,能够帮助他们高效地处理cookie相关任务。能够“直接导出cookie”的特性尤其实用,因为这使得开发者可以快速...
描述中的“ie cookie 查看 修改 好东西吧算是”表明这个工具对用户可能很有用,因为能够帮助用户更好地管理他们的在线数据。查看Cookie可以帮助用户了解哪些网站正在跟踪他们的活动,而修改Cookie则可能有助于用户在...
在Web开发中,Session、Cookie和Token是三种常见的身份验证机制,它们各有特点,并在不同的场景下发挥着关键作用。理解它们的关系以及Cookie的局限性对于构建安全的Web应用程序至关重要。 首先,让我们来探讨...
很全的php控制cookie的方法,我以前没有接触过这方面的东西,后来通过一个项目总结的。
可以双开网页用不同 的cookie 进行登陆! 是个相当不错的东西哟!
在本文中,我们将深入探讨Cookie横幅的原理、用途、实现方式以及相关的隐私法规。 首先,理解Cookie的基本概念至关重要。Cookie是服务器发送到用户浏览器并存储在本地的一小段数据,用于跟踪用户行为、保存登录状态...
【标题】"try-elm-cookie:测试elm-cookie的东西"是一个项目,主要目的是为了测试一个名为"elm-cookie"的库。这个库很可能是一个针对Elm编程语言的Cookie管理工具,允许开发者在Elm应用程序中处理用户的Cookie信息。...
"Jmeter跨线程组共享cookie过程图解" Jmeter跨线程组共享cookie是一个基础而重要的技术,在性能测试中非常有用。本文将详细介绍Jmeter跨线程组共享cookie的过程图解,通过示例代码和详细的解释,帮助读者更好地理解...
本文实例讲述了Python Web框架之Django框架cookie和session用法。分享给大家供大家参考,具体如下: part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话。 两者...
现在到了ASP.NET CORE的时代,但是ASP.NET CORE中没有FormsAuthentication这个东西,那么怎么做身份认证呢?答案是ASP.NET CORE已经为我们内置了Cookie身份认证的功能,而且使用起来非常方便,注意本文是基于ASP.NET...
本文章记录本人在学习 Cookie 中看书理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习。 封装函数 在默认的情况下存取Cookie是一件比较麻烦的事情。由于Cookie是通过字符串来存储信息的,所以容易导致...
就是这个东西有着很多程序的自动化工作止步,让人懊恼不已。 Cookies提取助手的出现,可以通过手工输入验证码,免去程序实现验证码识别的繁琐实现,提取有效可用的Cookie,提供给爬虫抓取程序,实现免验证码爬取。 ...
所以我们在学习一个东西的时候,一定要做到知其然知其所以然。 HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息)。客户端向服务器发起请求,如果服务器需要...
Pusheen饼干吃游戏 为“开发我的星球”课程的开发者联盟小学生准备的快速展示项目,展示了一个使用Javascript的小例子。 项目技术时间表: setInterval最初用于计时Pusheens进餐。... 动画一些东西。
排球曲奇使用截击保存 cookie 的示例1 - 将volley.jar从 libs 路径导入到您的项目2 - 在 build.gradle 依赖项中导入compile group: 'org.apache.... 我只需要这样的东西,我从 stackoverflow 写了一些代码。
在Java中,可以将我们自己的一些信息放进cookie,方法是将cookie信息放入到响应中,传递给浏览器。使用HttpServletResponse对象的addCookie()方法可以将cookie添加到响应头中。当我们发起这个请求时,在响应头有下列...
Cookie虽然是个很简单的东西,但它又是WEB开发中一个很重要的客户端数据来源,而且它可以实现扩展性很好的会话状态,所以我认为每个WEB开发人员都有必要对它有个清晰的认识。本文将对Cookie这个话题做一个全面的描述...
当然,这更是游戏化,而不是精确的东西。 首先,您必须创建一个slack命令来获取令牌 然后创建一个Webhook以获得您的URL 然后将此文件上传到WordPress网站的文件夹中(是的,实际上是WP已加载,即将独立发布) ...