cookie 概述

Author : luckyGirl

cookie是Document对象的一个属性,是一种HTTP服务器的机制,从客户端和服务器端都能访,使得JavaScript能够在用户的硬盘上持久地存储数据,而且所有的web浏览器都支持,并允许通过document.cookie属性来脚本化。

cookie是一个字符串属性,可以用来对当前网页的cookie进行读/创建/修改/删除操作,每个cookie都是名/值对,如document.cookie=”usedID=228″,如果需要一次存储多个名/值,可以使用分号加空格隔开(; )。因此在cookie 的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格,则需要encodeURICompent()函数进行编码,如果这么做了,在读取cookie值时就需要使用decodeURIComponent()函数。

cookie的四个可选属性:
expires/ max-age
指定cookie的生存期。默认情况下,cookie是暂时存在御浏览器的会话期间,当退出浏览器,cookie值也就丢失了,若想延长cookie的存在时间,可以将expires设置为未来的一个时期,尽管这个属性仍有效,但已被max-age取代,后者是以秒来设置cookie的生命期

path
指定了与cookie关联在一起的网页,默认情况下,cookie是和创建它的网页、与此网页处于同一目录下的网页以 及该目录的子目录下的网页相关联。假定一个由http://www.example.com/widgets/index.html设置的cookie的path设定为”/”,则对于www.example.com服务器上的所有网页都是可见的。

domain
默认情况下,只有和设置cookie的网页来自同一web服务器的页面才能访问这个cookie,但是大的网站是多个服务器共享cookie,如order.example.com的服务器需要读取catalog.example.com设置的cookie,把path设为”/”,并且domain设置为”example.com”,那么位于order.example.com,catalog.example.com以及所有位于example.com域的服务器都能访问这个cookie
Note: 不能将一个cookie的域设置成服务器所在域之外的域

secure
是布尔值,指定了网络上如何传输cookie值,默认值为false,即不安全的,普通的HTTP连接传输。设置为ture,那cookie将只在浏览器和服务器通过HTTPS或其他安全协议连接时才被传输
Note: expires, max-age, path, domain和secure都是cookie的属性,而不是JavaScript对象的属性

说了这么多,让我们来创建一个能够持续存在1年的cookie吧:
document.cookie=”version=” + document.lastModified + “; max-age=” + (60*60*24*365) + “; path=” + “/”;

cookie的局限性
1. 主要用于少量数据的不经常存储
2. 既不是一种通用的通信机制,也不是一种通用的数据传输机制,因此使用要适度
3. 数目,大小有限,如浏览器保存不能超过300个(有的浏览器已经允许),为每个web服务保存的cookie输不能超过20个,每个cookie不能超过4KB
4. 安全性与隐私性
cookie可能被禁用。当用户非常注重个人隐私保护时,他很可能禁用浏览器的cookie功能;
cookie是与浏览器相关的。这意味着即使访问的是同一个页面,不同浏览器之间所保存的cookie也是不能互相访问的;
cookie可能被删除。因为每个cookie都是硬盘上的一个文件,因此很有可能被用户删除;
cookie安全性不够高。所有的cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

参看资料:JavaScript权威指南

standard

Have your say