Cookie 主要包括 name 、 expires 、 path 、 domain 和 secure 等 5 个属性,其中 name 属性是必选属性,而其余 4 个属性为可选属性。下面简要介绍这 5 个属性。
name 属性: Cookie 属性中唯一必须设置的属性为 name 属性,表示 Cookie 的名称。
expires 属性: Cookie 的 expires 属性指定 Cookie 在删除之前要在客户机上保持多长时间。如果不使用 expires 属性, Cookie 只对当前浏览器会话有用,当用户关闭当前浏览时, Cookie 就会自动消失。
path 属性: path 属性决定 Cookie 对于服务器上的其他网页的可用性。在一般情况下, Cookie 对于同一目录下的所有页面都可用。当设置 path 属性后, Cookie 只对指定路径以及子路径下的所有网页有效。
domain 属性:许多服务器都由多台服务器组成, domain 属性主要设置相同域的多台服务器共享一个 Cookie 。例如,如果 Web 服务器 a1 需要与 Web 服务器 a2 共享 Cookie ,那么需要将 a1 的 Cookie 的 domain 属性设置为 a2 ,这样 a1 创建的 Cookie 就可以应用于 a2 和 a2 域的其他 Web 服务器。
secure 属性: Internet 连接本身是不安全的。为了保证 Internet 上的数据安全,会使用 SSL 协议加密数据并使用安全连接传输数据。一般支持 SSL 的网站以 HTTPS 开头。 Cookie 的 secure 属性表示 Cookie 只能通过使用 HTTPS 或其他安全协议的 Internet 连接来传输。如果 secure 属性不出现,就意味着 Cookie 在网络上未加密发送。
Cookie 中的 expires 属性写入 Cookie 的方式是 expires=date ,其中 name=value 和 expires=date 之间以分号和空格隔开。例如。
var date = new Date();
name = value;
expires = date.toUTCString();
不要使用 encodeURI 函数来编辑 expires 属性, JavaScript 不能识别 URI 中的编码格式。如果使用 encodeURI 函数来编辑 expires 属性, JavaScript 不能正确设置 Cookie 的过期时间。
Date 对象的每个部分,包括星期、月份、年份、时、分、秒都可以通过相应的函数来获取,例如取星期使用 getDate 方法。这些函数包括对应的 setXXX 函数与 getXXX 函数。如果需要获取下一星期的时间,可以通过 setDate 与 getDate 取得,例如。
var date = new Date();
date.setDate(date.getDate() + 7);
如果要写入一个名称为 test ,过期时间为一个星期的 Cookie ,需要使用如下代码:
var date = new Date();
date.setDate(date.getDate() + 7);
document.cookie = encodeURI('test=value') + 'expires=' + date.toUTCString();
使用 path 属性指定 Cookie 作用的范围。例如使名称为 test 的 Cookie 可用于 test 路径及其子路径下,可以使用如下代码:
document.cookie = 'test=value' + 'path=/test';
在开发 Cookie 的 JavaScript 程序中,如果目录中还存在其他设置 Cookie 的程序,则 JavaScript 程序不能正常运行,这时需要设置 path 属性使 Cookie 在某一个范围内有效。
如果设置 path=/ ,可以设置 cookie 信息与其服务器根目录及其子目录相关联,从而实现整个网站共享 cookie 信息;如果只想在 study 目录下使用,则可以设置 path=/bbs 即可
在 Cookie 的写入过程中,同样可以使用 domain 属性设置相同域共享同一个 Cookie 。如果 Web 服务器的域名在 9 个顶级域名之内,那么在设置 domain 属性时需要使用两个句点的域名,例如, .test.com 。如果 Web 服务器的域名不在 9 个顶级域名之内,那么需要使用 3 个句点的域名。下面的代码用于实现名称为 test ,域名为 test.test.com 的 Web 服务器的 Cookie 共享于域为 test.com 的所有 Web 服务器。
document.cookie = 'test=value;domain=test\*.com';
在使用 JavaScript 客户端时, secure 属性一般都会被忽略。如果需要使用这个属性,取值包括 secure 和空字符串的 secure 属性。如果一个名称 test 用 Cookie 的 secure 属性激活,可以使用如下代码:
document.cookie = 'test=value;secure=true';
默认下的 secure 的属性值为空,就是说 cookie 在不安全的 HTTP 连接传递数据。如果一个 cookie 设置了 true ,那么 cookie 在用户和服务器之间进行传递时,就通过 HTTPS 或者其他的安全协议进行传递。
可以将 Cookie 的写入操作封装在一个 JavaScript 函数中,例如。
function setCookie(name, value, expires, path, domain, secure) {
var t = new Date();
t.setTime(t.getTime());
if (expires) {
expires = expires * 1000 * 60 * 0 * 24;
}
var t_ = new Date(t.getTime() + t_);
document.cookie =
name +
'=' +
encodeURI(value) +
(expires ? ';expires=' + t_.toGMTString() : '') +
(path ? ';path=' + path : '') +
(domain ? 'domain=' + domain : '') +
(secure ? 'secure' : '');
}
上述函数中共有 6 个参数,分别设置 Cookie 中的 5 个属性,其中参数 value 为 name 属性的值。除了必须设置的 name 属性之外,其他属性的值都使用三目运算符进行设置。如果 value 参数值为空,则不进行此参数的设置;如果 value 参数值不为空,则需要对 Cookie 的相应属性进行设置。
所以,比较完善的 cookie 应该是这样的: