什么是cookie
cookie是存储在访问者计算机中的一个变量,当同一台计算机通过浏览器请求页面时,就会发送这个cookie,JavaScript可以创建和取回cookie值。
每个cookie都是key-value键值对的形式,如“username=123;userid=321”。
cookie使用escape()对它无法识别的“;”,“,”,“=”及空格进行编码,对应的在取出值以后需要使用unescape()进行解码才能得到原来的cookie值。
cookie跨域
默认情况下,在某页面下创建的cookie,可以被该目录下的其他页面访问及子目录下的页面访问,但是不可被不同源的页面访问,如www.xxxx.com/views/a.html下的cookie可以被www.xxxx.com/views/b.html和www.xxxx.com/views/index/c.html访问,但是不可以被www.xxxx.com/d.html访问,这涉及到了同源策略。
同源策略指的是不同源的客户端脚本在无明确授权下不可访问读写对方的资源,源指的是协议、域名、端口号。如http://www.xxx.com:80/,协议就是http或https,域名就是xxx.com,端口一般默认80。
解决cookie的跨域问题,如www.google.com和gmail.google.com的跨域,可以使用document.domain设置相同的域名。
创建cookie
参数存有 cookie 的名称、值以及过期天数
function setCookie(c_name,value,expire){
var date = new Date();
date.setSeconds(date.getSeconds()+expire);
document.cookie = c_name+'='+escape(value)+'; expires='+date.toGMTString();
}
读取cookie
function getCookie(c_name)
{
if(document.cookie.length>0){
let c_start = document.cookie.indexOf(c_name+'=')
if(c_start!=-1){
c_start = c_start+c_name.length+1
let c_end = document.cookie.indexOf(';',c_start)
if(c_end == -1) c_end=document.cookie.length
return unescape(document.cookie.substring(c_start,c_end))
}
}
return ""
}
删除cookie
function delCookie(c_name){
setCookie(c_name,'',-1)
}