基于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 相关文章推荐
Javascript 验证上传图片大小[客户端]
Aug 01 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
jquery点击缩略图切换视频播放特效代码分享
Sep 15 Javascript
JavaScript Split()方法
Dec 18 Javascript
AngularJS入门教程之REST和定制服务详解
Aug 19 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
详解原生js实现offset方法
Jun 15 Javascript
ES6学习教程之Map的常用方法总结
Aug 03 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
Mar 29 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
JavaScript创建、读取和删除cookie
Sep 03 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 身份验证方面的函数
2009/10/11 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
文本加密解密
2006/06/23 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
javascript基本算法汇总
2016/03/09 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
总经理助理岗位职责
2013/11/08 职场文书
大学生毕业自我评价范文分享
2013/11/11 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
加工操作管理制度
2014/01/19 职场文书
报社实习生自荐信
2014/01/24 职场文书
人力资源管理求职信
2014/08/07 职场文书
新教师培训心得体会
2014/09/02 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
linux目录管理方法介绍
2022/06/01 Servers