基于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 打地鼠游戏代码说明
Oct 12 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
Oct 16 Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
详细谈谈AngularJS的子级作用域问题
Sep 05 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
利用node.js爬取指定排名网站的JS引用库详解
Jul 25 Javascript
基于Vue制作组织架构树组件
Dec 06 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
基于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
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
PDO::setAttribute讲解
2019/01/29 PHP
js一组验证函数
2008/12/20 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
Python中正则表达式的用法实例汇总
2014/08/18 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python3开发环境搭建详细教程
2020/06/18 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
跟单文员的岗位职责
2013/11/14 职场文书
文明教师事迹材料
2014/01/16 职场文书
省三好学生申请材料
2014/01/22 职场文书
生物制药自我鉴定
2014/01/25 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
党支部书记岗位职责
2015/02/15 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
如何利用pygame实现打飞机小游戏
2021/05/30 Python