作者:博士吃货 | 来源:互联网 | 2018-06-19 07:57
读取COOKIE字符串方法:
代码如下:
一个网站的COOKIE字符串包含了该站点域名下的所有COOKIE(Javascript 可访问的,不包括 httponly 的COOKIE ),多个COOKIE之间用分号和一个空格隔开,最多一般是 20个或50个,例如,包含2个COOKIE的字符串格式为
代码如下:
document.COOKIE = "key1=value1; key2=value2"
一个COOKIE字符串最长为4k,超出个数限制或长度限制时将返回空值, COOKIE 个数超出限制时,会造成另外一些 COOKIE 丢失,按规范,丢失的应该是 最近、最少使用的,但是浏览器的实现并不完全遵循这个规范。
设置一个COOKIE的方法:
代码如下:
document.COOKIE="key=value;expires=date;path=/;domain=xxx.com;secure";
要设置多个COOKIE 只要反复使用 document.COOKIE = XXX 即可,会自动和其他COOKIE拼接成一个COOKIE字符串。
如果要读取某个COOKIE的值,只能通过解析COOKIE字符串来得到。
下面是设置COOKIE时的几个参数
1、名和值:key 为 COOKIE名称,value为COOKIE值
2、过期时间:expires用于设置过期时间,为格林威治字符串格式,如
代码如下:
expires = new Date('2011-12-30').toUTCString(); //"Fri, 30 Dec 2011 00:00:00 GMT"
如果没有设置过期时间,COOKIE将在浏览器关闭时失效。
3、所属路劲:网站某张网页中的脚本所设置的COOKIE默认情况下只能供该网页所在文件夹及其子文件夹中的网页访问,如 http://www.jb51.net/aa/1.html 所设置的COOKIE 不能被 http://www.jb51.net/bb/2.html 访问,更多的时候都希望一个COOKIE能被本站所有网页访问,这就需要设置path属性, path=/ 表示该COOKIE的所属路劲是网站根目录,这样本站所有网页都能访问。
4、所属域名:COOKIE无法跨域访问,一般情况下,COOKIE仅供本站使用,如果想在多个网站下共享,那么共享COOKIE的网站必须拥有同一个主域名,通过设置 domain属性来实现。比如,如果想让 www.jb51.net 和 bbs.jb51.net这两个二级域名下的网站共享COOKIE,在设置COOKIE时需要设置domain=jb51.net
5、加密传输:如果一个COOKIE带有secure属性,那么COOKIE在传输到服务器的过程中将使用加密数据的方式传输。
COOKIE字符串编码:
COOKIE字符串中不能包含空格,分号,逗号等特殊符号,如果可能包含这些符号,可以使用encodeURIComponent()函数将 COOKIE 的值进行编码,读取 COOKIE 的值时再使用decodeURIComponent()函数把值进行转换回来,如 document.COOKIE="key="+encodeURIComponent(value);
在服务器设置 COOKIE 并声明其私密性(secure 及 httponly):
有时候为安全,你可能需要限制一些 COOKIE 的访问
secure : 该 COOKIE 仅供 https 安全连接使用
httponly : COOKIE 仅供 http 传输过程中使用,Javascript 不能访问该 COOKIE
例如,在PHP 中使用内置函数setCOOKIE() 设置一个具有私密性限制的 COOKIE
setCOOKIE("UserIDCOOKIE","123456",time()+60*30,'/','mytest.com',false,true);
其中第六个参数 表示是否仅供 https 连接使用,第 七个参数 true 表示是否为 httponly
跨域请求及第三方 COOKIE ,以及 P3P(个人隐私保护策略):
浏览器的隐私设置(或者内容设置,chrome 在高级设置--内容设置 选项)中,设置禁止使用第三方 COOKIE 时,跨域请求(包括 iframe ,img ,Javascript 文件等请求)无法发送属于该域的 COOKIE .
例如, 通过 iframe 引用一个跨域的 页面 http://www.jb51.net/index.html ,即使浏览器中保存了属于 other.com 域名下的某个名为 otherLoginFrag 的COOKIE ,在 iframe 中请求 该页面时, otherLoginFrag 并不会随请求一起发往 www.other.com 的服务器。
第三方 COOKIE 限制在不同的浏览器中可能略有不同,比如, safari 在禁用 第三方 COOKIE 时,from 表单的提交也只有 post 方式才能提交 COOKIE .
如果在希望在浏览器禁用 第三方COOKIE 时仍能发送跨域请求的 COOKIE ,就需要在跨域的服务器中使用 P3P 响应头预先声明允许发送的 COOKIE.
代码如下:
//php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setCOOKIE("UserIDCOOKIE","123456");