基于js中document.cookie全面解析


Posted in Javascript onSeptember 14, 2017

什么是cookie?

cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。

设置cookie

每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:

document.cookie="userId=828";

document.cookie看上去就像一个属性,可以赋不同的值。但它和一般的属性不一样,改变它的赋值并不意味着丢失原来的值,例如连续执行下面两条语句:

document.cookie="userId=828";
document.cookie="userName=hulk";

这时浏览器将维护两个cookie,分别是userId和userName,因此给document.cookie赋值更像执行类似这样的语句:

document.addCookie("userId=828");
document.addCookie("userName=hulk");

事实上,浏览器就是按照这样的方式来设置cookie的,如果要改变一个cookie的值,只需重新赋值,例如:

document.cookie="userId=929";

这样就将名为userId的cookie值设置为了929。

获取cookie的值

下面介绍如何获取cookie的值。cookie的值可以由document.cookie直接获得:

var strCookie=document.cookie;

这将获得以分号隔开的多个名/值对所组成的字符串,这些名/值对包括了该域名下的所有cookie。例如:

document.cookie="userId=828";
document.cookie="userName=hulk";
var strCookie=document.cookie;
console.log(strCookie); //userId=828; userName=hulk

当然这个要在环境下运行,因为是获取当前域名下的cookie。

由此可见,只能够一次获取所有的cookie值,而不能指定cookie名称来获得指定的值,这正是处理cookie值最麻烦的一部分。

用户必须自己分析这个字符串,来获取指定的cookie值,例如,要获取userId的值,可以这样实现:

document.cookie="userId=828";
document.cookie="userName=hulk";
var strCookie=document.cookie;
console.log(strCookie); //userId=828; userName=hulk


function getdescookie(strcookie,matchcookie){
  var getMatchCookie;
  var arrCookie=strcookie.split(";");
  for(var i=0;i<arrCookie.length;i++){
     var arr=arrCookie[i].split("=");
     if(matchcookie == arr[0]){
        getMatchCookie = arr[1];
        break;
     }
  }
  return getMatchCookie;
}

var resultCookie = getdescookie(strCookie,'userId');
console.log(resultCookie); //828

这样就得到了单个cookie的值。

如果在某个页面创建了一个cookie,那么该页面所在目录中的其他页面也可以访问

该cookie。如果这个目录下还有子目录,则在子目录中也可以访问。

例如在www.xxxx.com/html/a.html中所创建的cookie,可以被www.xxxx.com/html/b.html或www.xxx.com/ html/ some/c.html所访问,但不能被www.xxxx.com/d.html访问。

为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法如下:

document.cookie="name=value; path=cookieDir";

其中cookieDir表示可访问cookie的目录。

例如:

document.cookie="userId=320; path=/shop";

就表示当前cookie仅能在shop目录下使用。

如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录,例如:

document.cookie="userId=320; path=/";

常用的cookie操作及其函数实现

addCookie

addCookie(name,value,expireHours) 该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。

function addCookie(name,value,expireHours){
   var exdate = new Date();

  exdate.setTime(exdate.getTime() + expireHours * 60 * 60 * 1000);


 document.cookie = c_name + "=" + escape(value) + ((expireHours == null) ? "" : ";expires=" + exdate.toUTCString());
}

getCookie

获取指定名称的cookie值:getCookie(name)

该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:

function getCookie(name){
 var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  if (arr = document.cookie.match(reg)){
    return (arr[2]);
  }else{
     return null;
  }   
}

或者不用正则匹配,如下面代码:

function getCookie(name){
   var strCookie=document.cookie;
   var arrCookie=strCookie.split(";");
   for(var i=0;i<arrCookie.length;i++){
      var arr=arrCookie[i].split("=");
      if(arr[0]==name){
        return arr[1];
      }
   }
   return null;
}

deleteCookie

删除指定名称的cookie:deleteCookie(name)

该函数可以删除指定名称的cookie,其实现如下:

function deleteCookie(name){
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  document.cookie = name + "=v;expires=" + exp.toUTCString();
}

说明下:这儿我用的toUTCString()方法,看了网上有的用的toGMTString()在格式化时间,但不赞成使用此方法。请使用 toUTCString() 取而代之!!在W3C中看到这句话。

以上这篇基于js中document.cookie全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery命名冲突解决的五种方案分享
Mar 16 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
Mar 26 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
JS判断非空至少输入两个字符的简单实现方法
Jun 23 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
Sep 15 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
JavaScript常用内置对象用法分析
Jul 09 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 Javascript
基于Vue过渡状态实例讲解
Sep 14 #Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
Sep 14 #Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
Sep 14 #Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 #Javascript
对于js垃圾回收机制的理解
Sep 14 #Javascript
使用SVG基本操作API的实例讲解
Sep 14 #Javascript
JSON 数据格式详解
Sep 13 #Javascript
You might like
php中substr()函数参数说明及用法实例
2014/11/15 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
PHP7 新增功能
2021/03/09 PHP
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
python实现ipsec开权限实例
2014/11/11 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python global全局变量函数详解
2018/09/18 Python
Python线程同步的实现代码
2018/10/03 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
升职自荐信
2013/11/28 职场文书
护理实习自我鉴定
2013/12/14 职场文书
八年级生物教学反思
2014/01/22 职场文书
大课间体育活动方案
2014/03/12 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
学习雷锋标语
2014/06/25 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
驻村工作简报
2015/07/20 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
python turtle绘图命令及案例
2021/11/23 Python
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS