基于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 相关文章推荐
js控制表单奇偶行样式的简单方法
Jul 31 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
jQuery切换所有复选框选中状态的方法
Jul 02 Javascript
js点击文本框弹出可选择的checkbox复选框
Feb 03 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
COM组件中调用JavaScript函数详解及实例
Feb 23 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
js实现简单分页导航栏效果
Jun 28 Javascript
vue分页插件的使用方法
Dec 25 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
Nov 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
功能强大的php分页函数
2016/07/20 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
React-Native 组件之 Modal的使用详解
2017/08/08 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
Python简单进程锁代码实例
2015/04/27 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
python输出决策树图形的例子
2019/08/09 Python
python实现在一个画布上画多个子图
2020/01/19 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
创先争优制度
2014/01/21 职场文书
爱心活动计划书
2014/04/26 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
委托书英文
2015/01/28 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
高中物理教学反思
2016/02/19 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL