js操作cookie
cookie基础
- cookie最大不能存放超过4kb的数据,否则返回空string;
- cookie以文件形式存储在本地,读取方便,所以尽量不要非加密存储重要信息;
- cookie格式: key=value;
- cookie有效期: 默认是关闭浏览器清除;设置有效期expires可以存在本地直到过期失效;
- cookie在常规状态下时不能跨域的,除非有特殊设置。cookie也不能被非本目录和子目录下的其他目录访问;
cookie问题
- cookie存在的两种类型: 访问的网站本身的cookie;第三方的cookie,来自帅其他的域;
- cookie的清除方式: 浏览器清除。设置失效日期清除;
- 浏览器可以设置是否允许访问cookie;
- 出于性能考虑,降低cookie使用数量,尽量使用小cookie;
cookie用法
- 简单存取:
简单实例:
‘username’ 表示cookie名称,'Dwyer’表示其值;如果名称不存在即创建新的cookie,否则就是修改cookie;document.cookie = 'username=Dwyer'
- cookie的读取:
操作字符串即可完成读取。例子援引w3school:function getCookie(c_name){ if (document.cookie.length>0){ //先查询cookie是否为空,为空就return "" c_start=document.cookie.indexOf(c_name + "=") //通过String对象的indexOf()来检查这个cookie是否存在,不存在就为 -1 if (c_start!=-1){ c_start=c_start + c_name.length+1 //最后这个+1其实就是表示"="号啦,这样就获取到了cookie值的开始位置 c_end=document.cookie.indexOf(";",c_start) //其实我刚看见indexOf()第二个参数的时候猛然有点晕,后来想起来表示指定的开始索引的位置...这句是为了得到值的结束位置。因为需要考虑是否是最后一项,所以通过";"号是否存在来判断 if (c_end==-1) c_end=document.cookie.length return unescape(document.cookie.substring(c_start,c_end)) //通过substring()得到了值。想了解unescape()得先知道escape()是做什么的,都是很重要的基础,想了解的可以搜索下,在文章结尾处也会进行讲解cookie编码细节 } } return "" }
- 设置有效期:
可以通过expires来设置有效期:
援引w3school例子如下:document.cookie = "name=value;expires=date"
此例是以天来设置cookie过期时间。function setCookie(c_name, value, expiredays){ var exdate=new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); } 使用方法:setCookie('username','Darren',30)
cookie高级设置
- 路径
cookie一般是由于用户访问页面而被创建的,但是其他页面也是可能访问得到本页面的cookie的。
默认情况下,只有创建在同一目录和子目录下的网页才能访问,但是 "http://www.cnblogs.com"或者 “http://www.cnblogs.com/xxxx/” 就不可以访问这个 cookie。
设置cookie的路径可以让cookie被其他目录和父级目录访问;
其中currentPath就是cookie的路径,最常用的是将cookie放在根目录下,这样当前域内的所有页面都可以访问cookie;document.cookie = ''name=value;path=currentPath" document.cookie = "name=value;expires=date;path=currentPath"
- 域
cookie的同域之间的访问:
currentDomain就是要设置的cookie的域;document.cookie = "name=value;path=currentPath;domain=currentDomain"
例如 “www.qq.com” 与 “sports.qq.com” 公用一个关联的域名"qq.com",我们如果想让 “sports.qq.com” 下的cookie被 “www.qq.com” 访问,我们就需要用到 cookie 的domain属性,并且需要把path属性设置为 “/”。例:
注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。document.cookie = "username=Darren;path=/;domain=qq.com"
- 安全性
为cookie加上一个属性"secure",默认值为空。其就会通过https协议进行传输,但是依旧不会对本地的cookie信息进行加密。document.cookie = "username=Darren;secure"
- 编码
在输入cookie信息时不能包含空格,分号,逗号等特殊符号,而在一般情况下,cookie 信息的存储都是采用未编码的方式。所以,在设置 cookie 信息以前要先使用escape()函数将 cookie 值信息进行编码,在获取到 cookie 值得时候再使用unescape()函数把值进行转换回来。如设置cookie时:
再看看基础用法时提到过的getCookie()内的一句:document.cookie = name + "="+ escape (value)
这样就不用担心因为在cookie值中出现了特殊符号而导致 cookie 信息出错了return unescape(document.cookie.substring(c_start,c_end))
参考链接:https://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html