cookie概念
储存在用户本地终端上的数据,用来存储用户的数据。
在一次会话从开始到结束的整个过程,全程跟踪记录客户端的状态(例如:是否登录、购物车信息、是否已下载、是否 已点赞、视频播放进度等等)
cookie一般情况下需要在服务器环境下加载。火狐支持本地加载。
cookie的组成
cookie 由名/值对形式的文本组成:name=value。完整格式为:
name=value;[expires=date];[path=path];[domain=somewhere.com];[secure]
中括号是可选,name=value 是必选。
//设置cookie
document.cookie = 'username=Tom';
//获取cookie
alert(document.cookie);
设置cookie的时候,有可能在cookie中存储中文。
【注】如果在cookie中有中文,一般情况下采取下述的处理方式。
1、编码去存储(中文 => 字符) encodeURIComponent 编码
2、解码去读取(字符 => 中文) decodeURIComponent 解码
expires
设置cookie过期日期,可以通过自定义的方式自定义过期日期。
【注】如果我们不去设置这个键,默认是当前会话结束时消失(只要将整个浏览器关闭)
细节:cookie过期的话,系统会自动清除过期的cookie。
删除cookie:我们可以将cookie过期日期,设置成过去的某一时刻。
path
限制访问路径:如果我们不去设置path,默认是当前加载的.html文件路径。
【注】如果设置的cookie路径和加载文件的路径不一致的话,不能访问到cookie。
domain
限制访问域名:如果不去设置,默认,是当前加载文件的域名或者IP。
【注】设置cookie的域名和加载文件的域名不一致的话,cookie设置失败。
secure
如果不设置,默认是false。可以允许任何网络传输协议加载 http https
【注】如果加了这个键,就必须用https协议(证书认证的协议)来加载文件。
cookie存储大小的限制:
cookie总共存储大小的上限是 4KB左右
cookie每一域名下面,最多可以存储50条cookie。
cookie的封装
获取cookie
function getCookie(name){
var cookieStr = decodeURIComponent(document.cookie);
// 1、键在字符串中出现的位置
var start = cookieStr.indexOf(name);
if(start == -1){
return null;
}else{
// 2、找到结束位置
var end = cookieStr.indexOf(";", start);
if(end == -1){
end = cookieStr.length;
}
}
// 3、提取字符串
var subStr = cookieStr.substring(start, end);
// 4、字符串分割
var arr = subStr.split("=");
return arr[1];
}
设置cookie
function setCookie(name, value, expires, path, domain, secure){
var cookieStr = encodeURIComponent(name) + '=' + encodeURIComponent(value);
if(expires){
cookieStr += ";expires=" + numOfDate(expires);
}
if(path){
cookieStr += ";path=" + path;
}
if(domain){
cookieStr += ";domain=" + domain;
}
if(secure){
cookieStr += ";secure";
}
document.cookie = cookieStr;
}
function numOfDate(n){
var d = new Date();
var date = d.getDate();
d.setDate(n + date);
return d;
}
删除cookie
function removeCookie(name){
document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
}