深入了解Cookie(1)------selenium2进行Cookie操作的前奏

世界上最宽阔的是海洋,比海洋还宽阔的是天空,比天空还宽阔的是人的心量。做人的心量有多大,人生的成就就有多大。不为一己之利去争、去斗、去夺,扫除报复之心和嫉妒之念,自然“心底无私天地宽”。

Cookie是当前识别用户,实现持久会话的最好方式。Cookie最初是由网景公司开发,但是现在所有的主要浏览器都支持它。

Cookie的类型:会话Cookie和持久Cookie

会话Cookie是一种临时Cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话Cookie就被删除了。

持久Cookie生存的时间相对较长,他们存储在硬盘上,浏览器退出,计算机重启它们仍然存在。通常会用持久Cookie维护用户会周期性访问的站点的配置文件或登录名。

会话Cookie和持久Cookie的唯一区别就是他们的过期时间。

如果设置了Discard参数,或者没有设置Expires或Max-Age参数来说明扩展的过期时间,这个Cookie就是一个会话Cookie。

想做持久Cookie-----一定要设置Expires或Max-Age参数。

Cookie的成分和版本

现在使用的Cookie规范有两个不同的版本:Cookies版本0(有时被称为Netscape Cookies)和Cookies版本1(RFC2965)。

Cookies版本1是对Cookies版本0的扩展,应用不如后者广泛。

Cookie规范版本0和版本1都不是昨晚HTTP1.1规范的一部分提供的。

标题 描述 位置
持久客户端状态:HTTP Cookies 最初的Netscape cookie 标准 http://home.netscape.com/newsref/std/cookie_spec.html
RFC 2965:HTTP 状态管理机制 2000年10月的cookie标准,废弃了RFC2109 http://www.ietf.org/rfc/rfc2965.txt

cookies版本0(Netscape)

定义了Set-Cookie响应首部、Cookie请求首部以及用于控制Cookie的字段

版本0的Set-Cookie首部

Set-Cookie首部有一个强制性的Cookie名和Cookie值,后面跟着可选的Cookie属性,中间由分号分隔。

Set-Cookie属性

Set-Cookie属性 描述及实例
NAME= VALUE                             强制的。NAME和VALUE都是字符序列,除非包含在双引号内,否则不包含分号、逗号、等号和空格。Web服务器可以创建任意的NAME=VALUE关联,在后继对站点的访问中会将其送回给Web服务器:Set-Cookie: customer=Mary
Expires 可选的。这个属性会指定一个日期字符串,用来定义Cookie的实际生存期。一旦到了过期日期,就不再存储或发布这个Cookie了,日期的格式为:Weekday, DD-Mon-YY HH:MM:SS GMT

唯一合法的时区为GMT,各日期元素之间的分隔符一定要是长划线。如果没有指定Expires,cookie 就会在用户会话结束时过期:

Set-Cookie:foo = bar;expires=Wednesday,09-Nov-99 23:12:30 GMT

Domain 可选的。浏览器只向指定的服务器主机名发送Cookie。这样服务器就将Cookie限制在了特定的域中。acme.com域与anvil.acme.com 和shipping.crat.acme.com相匹配,但是与www.cnn.com就不匹配。

只有指定域中的主机才能为一个域设置Cookie,这些域中至少有两个或三个句号,以防止出现.com 、.edu和va.us等形式的域。这里列出了一组固定的特定高层域,落在这个范围的域只需要两个句号。所有其他域至少需要三个句号,特定的高层域包括:

.com、.edu、.net、.org、.gov、.mil、.int、.biz、.info、.name、.museum、.coop、.aero和.pro。

如果没有指定域,就默认为产生Set-Cookie响应的服务器的主机名:

Set-Cookie:SHIPPING=FEDEX;domain="jose-hardware.com"

Path 可选的。通过这个属性可以为服务器上特定的文档分配Cookie,如果path属性是一个URL路径前缀,就可以附加一个Cookie。路径/foo与/foobar和/foo/bar.html相匹配。路径.与域名中所有的内容都匹配。

如果没有指定路径,就将其设置为产生Set-Cookie响应的URL的路径:

Set-Cookie: lastorder=00183; path=/orders

Secure 可选的。如果包含了这样一个属性,就只有在HTTP使用SSL安全连接时才会发送Cookie:

Set-Cookie: private_id=733; secure

版本0的Cookie首部

客户端发送请求时,会将所有与域、路径和安全过滤器相匹配的未过期Cookie都发送给这个站点。所有Cookie都被组合到一个Cookie首部中:

Cookie:session-id=002-2222233-2233322; session-id-time=1033949384

Cookies1版本(RFC 2965)

RFC 2965定义了一个Cookie的扩展版本。这个版本1标准引入了Set-Cookie2首部和cookie2首部,它比网景的标准略复杂,还未得到完全的支持。

改动项:

1.为每个Cookie关联上解释性文本,对其目的进行解释

2.允许在浏览器退出时,不考虑过期时间,将Cookie强制销毁

3.用相对秒数,而不是绝对日期来表示Cookie的Max-Age

4.通过URL端口号,而不仅仅是域和路径过滤器(如果有的话)

5.为实现互操作性使用的版本号

6.在Cookie首部从名字中区分出附加关键字的$前缀

Cookie版本1的语法如下:

set-cookie = "Set-Cookie2:" cookies
cookies = 1#cookie
cookie = NAME "=" VALUE * (" , set-cookie-av")
NAME = attr
VALUE = value
set-cookie-av = "Comment" "=" value
  | "CommentURL" “=”
<”> http_URL <">
  | "Discard"
  | "Domain" "=" value
  | “Max-Age” "=" value
  | "Path" "=" value
  | "Port" [ "=" <"> portlist <"> ]
  | "Secure"
  | "Version" "=" 1*
DIGIT
portlist = 1#portnum
portnum = 1*DIGIT
     
cookie = "Cookie:" cookie-version 1*((";" | ",") cookie-value)
cookie-value = NAME "=" VALUE [";" path] [";" domain] [";" port]
cookie-version = "$Version" "="
NAME = attr
VALUE = value
path = "$Path" "=“ value
domain = "$Domain" "=" value
port = "$Port" [ "=" <"> value <"> ]
cookie2 = "Cookie2:" cookie-version

版本1的Set-Cookie2首部

Set-cookie2属性 描述及实例
NAME=VALUE 强制的。WEB服务器可以创建任意的NAME=VALUE关联,可以在后继对站点的访问中将其发回给WEB服务器,"$"是保留字符,所以名字一定不能以它开头
Version 强制的。这个属性值是一个整数,对应于cookie规范的版本、RFC 2965 为版本1:

Set-Cookie2: part="Rocket_launcher_0001"; Version="1"

Comment 可选的。这个属性说明了服务器准备如何使用这个cookie。用户可以通过检查次策略来确定是否允许使用带有这个cookie的会话,这个值必须采用UTF-8编码
CommentURL 可选的。这个属性提供了一个URL指针,指向详细描述了cookie目的及策略的文档。用户可以通过查看此策略来判定是否允许使用带有这个cookie的会话
Discard 可选的。如果提供了这个属性,就会在客户端程序终止时,指示客户端放弃这个cookie
Domain 可选的。浏览器只向指定域中的服务器主机名发送cookie。这样服务器就可以将cookie限制在特定域中了,acme.com域与主机名anvil.acme.com和shipping.crate.acme.com相匹配,但不匹配于www.cnn.com。域名匹配的规则基本上与网景cookie一样,但有几条附加的规则。
Max-Age 可选的。这个属性的值是一个整数,用于设置以秒为单位cookie生存期。客户端应该根据HTTP/1.1的使用期计算规则来计算cookie的使用期。cookie的使用期比Max-Age大时,客户端就应该将这个cookie丢弃。值为零说明应该立即将那个cookie丢弃。
Path 可选的。通过这个属性可以为服务器上的特定文档指定cookie。如果path属性是一个URL路径的前缀,就可以附加一个cookie。路径/foo匹配于/foobar和/foo/bar.html。路径" / "匹配于域中所有内容。如果没有指定路径,就将其设置为生成Set-Cookie响应的路径。
Port 可选的。这个属性可以单独作为关键字使用,也可以包含一个由逗号分隔的、可以应用cookie的端口列表。如果有端口列表,就只能向端口与列表中的端口相匹配的服务器提供cookie,如果单独提供关键字Port而没有值,就只能向当前响应服务器的端口号提供cookie
Secure 可选的。如果包含这个属性,就只有在HTTP中使用SSL安全连接时才能发送cookie

版本1的Cookie首部

版本1的cookie会带回与传送的每个cookie相关的附加信息,用来描述每个cookie途径的过滤器。每个匹配的cookie都必须包含来自相应Set-Cookie2首部的所有Domain、Port或path属性。

深入了解Cookie(1)------selenium2进行Cookie操作的前奏

时间: 2024-10-05 09:53:38

深入了解Cookie(1)------selenium2进行Cookie操作的前奏的相关文章

C# 自定义cookie封装类,简化Cookie操作

封装了常用的cookie操作,包括读取cookie.写入cookie.设置cookie过期时间等等. using System; using System.Web; namespace DotNet.Utilities { public class CookieHelper { /// <summary> /// 清除指定Cookie /// </summary> /// <param name="cookiename">cookiename<

jquery.cookie.js &amp;&amp; java后台代码 操作cookie实现记住当前用户输入信息代码

下载jquery.cookie.js地址看这里:http://pan.baidu.com/s/1gdCPaN5 //初始化页面时验证是否记住了密码 $(document).ready(function() {   if ($.cookie("rmbUser") == "true") { //判断上次登陆是否已记住密码 $("#rmbUser").attr("checked", true); //设置记住密码复选框选中 //$.

$.cookie(&#39;name&#39;, null) 删除cookie 失效问题

这几天在做网站的用户登录和退出功能,我使用jquery.cookie.js来操作cookie,但是用$.cookie('name', null) 总是失效, 后来使用$.cookie("name",null,{path:"/"})  成功删除cookie. 记录备查... $.cookie('name', null) 删除cookie 失效问题

详解 Cookie 纪要(vue.cookie,jquery.cookie简化)

今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文如下,记录到此供以后查阅并希望好文章能被更多需要的人看到   背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性.在JavaScript中可以通过 document.c

关于cookie的文章(cookie与session机制)

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程序中,会话跟踪是很重要的事情.理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个

jQuery操纵cookie(原生javascript处理cookie)

jQuery也是可以操作cookie的 1.首先下载jQuery.js 以及 jquery.cookie.js 这两个文件 2.安装(其实就是引用) <html>       <head> <!--引入jquery-->            <script type="text/javascript" src="jquery-2.1.1.min.js"></script> <!--引入jquery-

怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解

在操作cookie之前,先来看一下cookie长什么样. 可以看到,cookie是一个个键值对(“键=值”的形式)加上分号空格隔开组合而成, 形如: "name1=value1; name2=value2; name3=value3" 设置cookie: 1 /** 2 * 设置cookie 3 * @param name cookie的名称 4 * @param value cookie的值 5 * @param day cookie的过期时间 6 */ 7 var setCooki

浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!

由于近段时间帮朋友开发一个能够查询正方教务系统的微信公众平台号.有所收获.这里总结下个人经验. 开讲前,先吐槽一下新浪云服务器,一个程序里的   同一个函数  在PC测试可以正常运行,在它那里就会挂的现象. 老样子,我将在代码里注释清楚.使用下面的函数,将会获得两种形式的 cookie,一种保存在文件中,一种直接以变量的形式返回, 经验提示: 有时候,在不同的代码运行环境中,带着文件cookie 去访问会成功,而变量却失败,有时候却想法.不过, 目前,这两种方法总有一种会成功. 1 functi

Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie

服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies CookieTest1.java //CookieTest1 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class CookieTest1 extends HttpServlet{ public voi