简介
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
cookie
1.最大存储4kb,每个域名最多存储50条
2.可以设置过期时间
cookie是键值对,key和value都可以自定义
cookie不设置过期,会话关闭时就会结束。cookie一个键只能存储一个值,再去赋值就会顶替。当cookie过期浏览器就会删除cookie,想要删除cookie可以设置负的天数
火狐支持本地加载cookie,google只支持服务器加载cookie
path:可以设置访问路径,也可以限制cookie访问路径。当cookie不设置路径的时候,cookie路径默认为当前访问路径。cookie设置的路径和访问路径不同的时候,cookie不能访问。cookie访问和设置的路径相同才能访问。
文件设置cookie,可以不访问。cookie访问的文件必须和存储cookie的路径一致才能访问cookie成功
domain:限制访问域名——用来设置域名,如果不设置域名,默认服务器域名。如果设置域名后,cookie设置的域名和加载的域名必须一致,才能设置cookie成功
secure:限制协议——用来设置访问协议,如果不设置,默认http或https都可以加载文件设置cookie。设置secure后只能通过https协议加载设置cookie。
https需要正规证书认证
document.cookie='username=xxx'; //设置cookie
alert(document.cookie);//输出cookie
解决存储中文时中文乱码
document.cookie='username='+encodeURIComponent("钢铁侠");//编码
alert(decodeURIComponent(document.cookie));//解码
//设置cookie期限
document.cookie='username=xxx;expires='+afterOfDay(7);
//设置cookie过期,过期后自动删除
document.cookie='username=;expires='+afterOfDay(-1);
document.cookie='username=;expires='+ new Date(0);
new Date(0)//计算机初始时间 1970年
//设置cookie路径path(如果不设置路径,默认是加载页面的路径)
document.cookie='user=xxx;path='+'/demo';
//设置cookie域名
document.cookie='user=xx;domain='+'local';
//设置访问协议 http/https
document.cookie='user=xx;secure';
封装cookie方法
//根据传入参数个数判断方法
function $cook(name){
switch(arguments.length){
case 1:
return getCookie(name);
break;
case 2:
if(arguments[1]==null){
rmCook(name);
}else{
setCookie(name,arguments[1],{});
}
break;
default:
setCookie(name,arguments[1],arguments[2]);
break;
}
}
//设置cookie
function setCookie(name, value, { expires, path, domain, secure }) {
var cookStr = encodeURIComponent(name) + '=' + encodeURIComponent(value);
if (expires) {
cookStr += ';expires=' + afterOfDay(expires);
}
if (path) {
cookStr += ';path=' + path;
}
if (domain) {
cookStr += ';domain=' + domain;
}
if (secure) {
cookStr += ';secure';
}
document.cookie = cookStr;
}
//获取cookie的值
function getCookie(name) {
var cookStr = decodeURIComponent(document.cookie);
//检索字符串
var start = cookStr.indexOf(name + '=');// 获取开始下标
if (start == -1) {
return null;
} else {
var end = cookStr.indexOf(";", start);
if (end == -1) {
end=cookStr.length;
}
}
var str=cookStr.substring(start,end);
alert(str);
}
//删除cookie,利用日期过期删除cookie
function rmCook(name){
document.cookie=encodeURIComponent(name)+'=;expires='+new Date(0);
}
//几天后的时间
function afterOfDay(n) {
var d = new Date();
var day = d.getDate();
d.setDate(n + day);
return d;
}