27.Cookie与存储

Cookie与存储

 
学习要点:
1.cookie
2.cookie局限性
3.其他存储
 
随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能,这个时候,第一个出现的方案:cookie诞生了。cookie的意图是:在本地的客户端的磁盘上以很小的文件形式保存数据。
 
一、Cookie
cookie也叫HTTPCookie,最初是客户端与服务器端进行会话使用的。比如,会员登录,下次回访网站时无须登录了,或者是购物车,购买的商品没有及时付款,过两天发现购物车里还有之前的商品列表。
 
HTTPCookie要求服务器对任意HTTP请求发送Set-Cookie,因此,Cookie的处理原则上需要在服务器环境下进行。当然,现在大部分浏览器在客户端也能实现Cookie的生成和获取。(目前Chrome不可以在客户端操作,其他浏览器均可)
 
cookie的组成
cookie有名/值对形式的文本组成:name=value , 完整格式为:
name = value;[expires = date];[path=path];[domain=somewhere.com];[secure]
 
中括号是可选,name=value 是必选
document.cookie = 'user=' + encodeURLComponent('征程'); //编码写入
alert(decodeURLComponent(document.cookie));                    //解码读取
 
expires=date 失效时间,如果没有声明,则为浏览器关闭后即失效。声明了失效时间,那么时间到期后方能失效。
var date = new Date();
date.setDate(date.getDate() + 7);
document.cookie = 'user='+encodeURLComponent('征程')+';expires='+date;
 
use=值;expires=失效时间;path=路径访问;domain=域名访问;secure=安全的https限制
 
PS:可以通过Firefox浏览器查看和验证失效时间。如果要提前删除cookie也非常简单,只要重新创建cookie把时间设置当前时间之前即可:date.getDate()-1或new Date(0)。
 
path=path 访问路径,当设置了路径,那么只有设置的那个路径文件才可以访问cookie。
var path = '/E:/%E5%A4%87%E8%AF%BE%E7%AC%94%E8%AE%B0/JS1/29/demo';
document.cookie="user="+encodeURLCompenent('征程')+";path="+path;
 
PS:为了操作方便,我直接把路径复制下来,并且增加了一个目录以强调效果。
 
domain=domain 访问域名,用于限制只有设置的域名才可以访问,那么没有设置,会默认限制为创建cookie的域名。
var domian= 'baidu.com';
document.cookie = "user="+encodeURLComponent('征程')+";domain="+domain;
 
PS:如果定义了baidu.com,那么在这个域名下的任何网页都可以访问,如果定义了v.baidu.com,那么只能在这个二级域名访问该cookie,而主域名和其他子域名则不能访问。
PS:设置域名,必须在当前域名绑定的服务器上设置,如果在baidu.com服务器上随意设置其他域名,则会无法创建cookie。
 
 
secure安全设置,指明必须通过安全的通过安全的通信来传输(HTTPS)才能获取cookie。
document.cookie = "user=" + encodeURLComponent('征程')+";secure";
 
PS:https安全通信链接需要单独配置。
 
JavaScript设置、读取和删除并不是特别的直观方便,我们可以封装成函数来方便调用。
 
 
//设置cookie
function setCookie(name,value,expires,path,domain,secure){
    var cookieName = encodeURIComponent(name)+'='+encodeURIComponent(value);
    if(expires instanceof Date){
        cookieName +='; expires='+ expires; 
    }
   
if(path){
        cookieName +='; expires='+expires;
    }
     if(domain){
        cookieName +='; domain='+domian;
    }
     if(secure){
        cookieName +='; secure';
    }
    document.cookie = cookieName;
}
//获取cookie
function getCookie(){
     var cookieName = encodeURIComponent(name) + '=';
     var cookieStart = document.cookie.indexOf(cookieName);
     var cookieValue = null; 
    if(cookieStart>-1){
        var cookieEnd = document.cookie.indexOf(';' , cookieStart);
        if(cookieEnd == -1){
            cookieEnd = document.cookieEnd.length;
        }
        cookieValue = document.cookie.substring(cookieStart + cookieName.length , cookieEnd);
        return cookieValue;
    }
}
alert(getCookie('user'));
alert(getCookie('url'));
alert(getCookie('emial'));
 
//过期时间
function setCookieDate(day){    //传递一个天数,比如7,就是7天后失效
    var date = null;
    if(typeof day == 'number' && day>0){
        date = new Date();
        date.setDate(date.getDate()+day);
    }else{
        throw new Error('天数不合法!必须是数字且大于0');
    }
    return date;
}
 
//setCookie('user' , 'journey' , setCookieDate(7));
posted @ 2018-01-10 22:55  journeyIT  阅读(17)  评论(0编辑  收藏  举报