本文为个人读书笔记,大部分为书中内容摘要。仅供记录和分享学习中遇到的需要留意的问题,如有相关版权问题请及时通知作者。
概述
http是一种无状态协议,不保存任何信息。这给在浏览器回话期间维持某种连续性带来了困难,cookie是解决这个问题的一个途径。
cookie本身是一些短小的信息串,能够由页面保存在用户的计算机上,然后可以被其他页面读取。
cookie的局限
通常每个域名20个,每个域4KB,有很多情况会导致其意外消失
document.cookie属性
JavaScript使用document对象的cookie属性存储和获取cookie。
每个cookie基本上就是一个由成对的名称和值组成的字符串:username=sam
页面加载到浏览器里时,浏览器会收集与页面相关的全部cookie,放到类字符串的document.cookie属性里。在这个属性里,每个cookie以分号分隔。
数据的编码和解码
某些字符不能再cookie里使用,在把数据存入cookie前需要编码。
escape()编码 unescape()解码
escape()会把字符串里任何非ASC II字符转换为相应的2位或4位十六进制格式。
cookie组成
cookie规范:RFC6265 2011
cookiename,cookievalue cookie字符串里看到的名称与值
domain:可选,向浏览器指明cookie属于哪个域,默认是设置cookie页面的所在域。
path:指定可以使用cookie的目录,常用默认“/”,所有
secure:可选,浏览器发送cookie给服务器时是否使用SLL安全标准
expires:失效日期,以UTC事件表示。没有设置cookie的生命期就和当前浏览器会话一样长
编写cookie
只要把包含所需属性的值赋予document.cookie
编写cookie的函数
function createCookie(name,value,days,path,domain,secure){
if(days){
var date=new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires=date.toGMTString();
}
else var expires="";
cookieString=name+"="+escape(value);
if(expires) cookieString+=";expires="+expires;
if(path) cookieString+=";path="+excape(path);
if(domain) cookieString+=";domain="+escape(domain);
if(secure) cookieString+=";secure";
document.cookie=cookieString;
}
读取cookie
1、split()
var crumbs=document.cookie.split(‘;’);
2、indexof,substring
function getCookie(name){
var nameEquals=name+"=";
var crumbs=document.cookie.split(';');
for(var i=0;i<crumbs.length;i++){
var crumb=crumbs[i];
if(crumb.indexOf(nameEquals)==0){
return unescape(crumb.substring(nameEquals.length,crumb.length));
}
}
return null;
}
删除cookie
把它的失效日期设置为今天以前的日期
function deleteCookie(name){
createCookie(name,"",-1);
}
即使脚本把cookie删除,某些浏览器也会维持其至重新启动浏览器。如果cookie是否被删除是程序运行的条件,就应该使用getCookie来测试被删除的cookie,确保它确实不存在了。
在一个cookie里设置多个值
把需要的值组成一个字符串,让它成为要保存在cookie里的值。
var userdata="Sandy|26|A23679";
createCookie("user",userdata);
读取
var myUser=getCookie("user");
var myUserArray=myUer.split('|');
var name=myUserArray[0];
var age=myUserArray[1];