浏览器里的cookie是什么 浏览器cookie是什么意思( 二 )


安全标志
指定后 , cookie 只有在使用 SSL 连接的时候才发送到服务器 。例如 , cookie 信息只能发送给 https://www.wrox.com , 而 http://www.wrox.com 的请求则不能发送 cookie 。每一段信息都作为 Set-Cookie 头的一部分 , 使用分号加空格分隔每一段 , 如下例所示 。
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value; expires=Mon, 22-Jan-07 07:10:24 GMT; domain=.wrox.com Other-header: other-header-value该头信息指定了一个叫做 name 的 cookie , 它会在格林威治时间 2007 年 1 月 22 日 7:10:24 失效 , 同时对于 www.wrox.com 和 wrox.com 的任何子域(如 p2p.wrox.com)都有效 。secure 标志是 cookie 中唯一一个非名值对儿的部分 , 直接包含一个 secure 单词 。如下:
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value; domain=.wrox.com; path=/; secure Other-header: other-header-value这里 , 创建了一个对于所有 wrox.com 的子域和域名下(由 path 参数指定的)所有页面都有效的cookie 。因为设置了 secure 标志 , 这个 cookie 只能通过 SSL 连接才能传输 。尤其要注意 , 域、路径、失效时间和 secure 标志都是服务器给浏览器的指示 , 以指定何时应该发送 cookie 。这些参数并不会作为发送到服务器的 cookie 信息的一部分 , 只有名值对儿才会被发送 。
Javscript操作cookie在JavaScript中处理cookie有些复杂 , 因为其众所周知的蹩脚的接口 , 即BOM的document. cookie属性 。这个属性的独特之处在于它会因为使用它的方式不同而表现出不同的行为 。当用来获取属性值时 , document.cookie 返回当前页面可用的(根据 cookie 的域、路径、失效时间和安全设置)所有 cookie的字符串 , 一系列由分号隔开的名值对儿 , 如下例所示 。
name1=value1;name2=value2;name3=value3所有名字和值都是经过 URL 编码的 , 所以必须使用 decodeURIComponent()来解码 。
注意:当用于设置值的时候 , document.cookie 属性可以设置为一个新的 cookie 字符串 。这个 cookie 字符串会被解释并添加到现有的 cookie 集合中 。设置 document.cookie 并不会覆盖 cookie , 除非设置的cookie 的名称已经存在 。设置 cookie 的格式如下 , 和 Set-Cookie 头中使用的格式一样 。
name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure
这些参数中 , 只有 cookie 的名字和值是必需的 。下面是一个简单的例子 。
document.cookie = "name=Nicholas";
这段代码创建了一个叫 name 的 cookie , 值为 Nicholas 。当客户端每次向服务器端发送请求的时候 , 都会发送这个 cookie;当浏览器关闭的时候 , 它就会被删除 。虽然这段代码没问题 , 但因为这里正好名称和值都无需编码 , 所以最好每次设置 cookie 时都像下面这个例子中一样使用encodeURIComponent() 。document.cookie = encodeURIComponent("name") + "=" + encodeURIComponent("Nicholas");
要给被创建的 cookie 指定额外的信息 , 只要将参数追加到该字符串 , 和 Set-Cookie 头中的格式一样 , 如下所示 。document.cookie = encodeURIComponent("name") + "=" + encodeURIComponent("Nicholas") + "; domain=.wrox.com; path=/";
由于JS操作cookie比较麻烦 , 我们一般封装一层
var CookieUtil={ setCookie:function(name,value,expiredays){ var d=new Date(); d.setDate(date.getDate()+expiredays); window.document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + ";path=/;expires=" + d.toGMTString(); }, getCookie:function(name){ var v=document.cookie.match('(^|;)'+name+'=([^;]*)(;|$)')); return v?v[2]:null; }, deleteCookie:function(name){ this.setCookie(name, '', -1) }}Cookie的缺点1、大小限制 , 每个域的 cookie 总数是有限的 , 不过浏览器之间各有不同
IE6 以及更低版本限制每个域名最多 20 个 cookie 。IE7 和之后版本每个域名最多 50 个 。IE7 最初是支持每个域名最大 20 个 cookie , 之后被微软的一个补丁所更新 。Firefox 限制每个域最多 50 个 cookie 。Opera 限制每个域最多 30 个 cookie 。Safari 和 Chrome 对于每个域的 cookie 数量限制没有硬性规定 。大多数浏览器都有大约 4096B(加减 1)的长度限制 。为了最佳的浏览器兼容性 , 最好将整个 cookie 长度限制在 4095B(含 4095)以内 。尺寸限制影响到一个域下所有的 cookie , 而并非每个 cookie 单独限制 。如果你尝试创建超过最大尺寸限制的 cookie , 那么该 cookie 会被悄无声息地丢掉 。注意 , 虽然一个字符通常占用一字节 , 但是多字节情况则有不同 。2、过多的 Cookie 会带来巨大的性能浪费