cookie

cookie是浏览器提供的一种机制,可以由JavaScript对其进行操作(设置、读取、删除)
cookie是一种会话跟踪技术,是存储于访问者计算机中的一小块数据

cookie的组成部分:
name=value;[expires=date];[path=path];[domain=somewhere.com];[secure]
必选项:name和value
可选项:后面中括号(这里的中括号是我加的)里面填写的参数。

细节:
火狐浏览器支持本地缓存cookie
谷歌浏览器不支持本地缓存cookie,谷歌浏览器想要缓存cookie
必须使用http或者https协议加载,必须通过服务器缓存cookie。

【注】如果大家想要设置中文不乱码,我们可以通过编码进行存储,通过解码进行读取。
encodeURIComponent 将中文编码成字符
decodeURIComponent 将字符解码转成中文

设置cookie
document.cookie = ‘username=xhw’;
获取cookie
alert(document.cookie);

expires 过期时间
设置cookie的过期时间的,赋值必须是日期对象,如果过期,系统会自动清除过期的cookie。
主动删除cookie,只需将cookie时间设置成过去的时间即可·。
【注】如果不设置这个值,默认是"会话",一次会话(打开浏览器-关闭浏览器)
设置cookie有效期:

//封装函数,获取n天后的时间
   function afterOfDate(n){
       var d = new Date();
       var day = d.getDate();
       d.setDate(day + n);
       return d;
   }

document.cookie=“username=xhw; expires=”+afterOfDate(n); // n等于有效期天数
删除cookie:
document.cookie = ‘username=;expires=’ + new Date(0);

path 限制访问路径
如果不去设置,默认就是当前文件加载的路径。
如果设置的cookie的路径,和实际加载文件的路径不一致,禁止访问cookie。

domain 限制访问域名
如果不去设置,默认就是当前加载文件的主机名。
设置的域名和,加载文件的域名不一致的话,连cookie都加载不成功。

secure
设置安全,默认是false
【注】只支持通过https协议加载页面,去设置cookie。
【注】https协议的域名,最好是可以去买一个现成的,阿里云。

cookie特点
1、最大只有4kb
2、数据有限制,一个域名下,最多只能存储50条数据
3、有时效性,可以设置过期时间
4、有域名的限制,你设置谁能读取,才能读取

cookie的缺点
1.cookie可能被禁用
2.cookie与浏览器相关,不能互相访问
3.cookie可能被用户删除
4.cookie安全性不够高
5.cookie会随着HTTP请求发送给服务器
6.cookie存储空间很小(只有4KB左右)
7.cookie操作麻烦,没有方便的API

cookie应用场景

  • 会话状态管理(如用户登录状态、购物车等)
  • 个性化设置(保存用户设置的样式等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

cookie的封装
为了我们操作cookie以后可以方便一点,我们可以针对于cookie的操作进行封装函数。

setCookie() 设置cookie

function setCookie(name, value, {expires, path, domain, secure}){
       //1、拼接字符串
       var cookieStr = encodeURIComponent(name) + "=" + encodeURIComponent(value);
       //2、判断可选项是否存在
       if(expires){
           cookieStr += ";expires=" + afterOfDate(expires);
       }
       if(path){
           cookieStr += ";path=" + path;
       }
       if(domain){
           cookieStr += ";domain=" + domain;
       }
       if(secure){
           cookieStr += ";secure";
       }
       //3、将字符串设置cookie
       document.cookie = cookieStr;
   }
   //封装函数,获取n天后的时间
       function afterOfDate(n){
           var d = new Date();
           var day = d.getDate();
           d.setDate(day + n);
           return d;
       }

getCookie() 通过name获取对应的值

 function getCookie(name){
          var cookieStr = decodeURIComponent(document.cookie);
          //1、先去查找这个name第一次出现的位置
          var start = cookieStr.indexOf(name + "=");
          if(start == -1){
              return null;
          }else{
              //2、找结束的位置
              var end = cookieStr.indexOf(";", start);
              if(end == -1){
                  end = cookieStr.length;
              }
              //通过start和end这两个部分,去提取对应的键值对
              var str = cookieStr.substring(start, end);
              var arr = str.split("=");
              return arr[1];
          }
      }

removeCookie() 删除cookie

function removeCookie(name){
   document.cookie = encodeURIComponent(name) + "=;expires=" + new Date(0);
}

通过一个函数,将上述三个函数功能合体

function $cookie(name){
    switch(arguments.length){
        case 1:
            return getCookie(name); //获取cookie
            break;
        case 2:
            arguments[1] == null ? removeCookie(name) : setCookie(name, arguments[1], {});
            break;
        case 3:
            setCookie(name, arguments[1], arguments[2]);
            break;
        default:
            break;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值