文章来源:http://book.csdn.net/bookfiles/344/10034413531.shtml
Tags: cookiecookie | javascriptjavascript | web开发web开发
2007-10-5 22:17:47 | 编辑
使cookie只能通过特定的域和路径访问
虽然一个域的cookie不能阅读在其他域中设置的cookie值,但是仍然有一些方法能在一定程度上突破限制。这包括通过子域以及目录路径来读取cookie。
方 法
在默认情况下,如果设置了一个cookie,那么这个cookie只能被这个域的其他页面访问。所以,如果http://javascript.sitepoint.com/的一个页面写了一个cookie,那么http://php.sitepoint.com的页面将无法访问该cookie。为了允许sitepoint.com的所有子域访问该cookie,在cookie创建的时候需要设定域范围。为了实现这个设定,只需在cookie字符串的末尾加上";domain=domainName"一句即可:
File: cookie_specific_domain.js (excerpt)
theCookie += ";domain=sitepoint.com";
document.cookie = theCookie;
现在这个cookie可以被sitepoint的所有子域的页面读取,包括http://www.sitepoint.com。
另外一个访问限制条件是,在默认情况下,cookie只能被同在当前目录中的其他页面,或者当前目录的子目录中的页面访问。所以,如果http://www.sitepoint.com/scripts/cookie_ monster.htm写了一个cookie,http://www.sitepoint.com/kermit.htm将无法读取该cookie。
可以设定允许读取cookie的目录的层级,只需在cookie字符串的末尾加上一句“;path=pathName”即可:
File: cookie_specific_domain.js (excerpt)
theCookie += ";path=/";
document.cookie = theCookie;
现在该cookie可以被在根目录下的所有页面读取,这意味着那个网站的所有页面都可以读取该cookie。
讨 论
在默认情况下,所有的cookie都通过一种不安全的通道发送给服务器。如果希望将cookie传送给受保护的服务器,例如,以https开头的域名,需要给cookie加上一个secure选项:
theCookie += ";secure";
document.cookie = theCookie;
现在,这个cookie对于来自不安全通道的请求根本不做出回应,除非请求来自于一个安全的通道,它才会被发送出去。