基于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 相关文章推荐
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
javascript 按回车键相应按钮提交事件
Nov 02 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
Jan 22 Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
JS实现Select的option上下移动的方法
Mar 01 Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 Javascript
ES6中Proxy代理用法实例浅析
Apr 06 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
Nov 28 Javascript
vue语法自动转typescript(解放双手)
Sep 18 Javascript
layui 数据表格复选框实现单选功能的例子
Sep 19 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
phpmyadmin的#1251问题
2006/11/25 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
关于跨站脚本攻击问题
2011/12/22 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python and or用法详解
2019/06/26 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
python dumps和loads区别详解
2020/02/04 Python
pandas中ix的使用详细讲解
2020/03/09 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
日语求职信范文
2013/12/17 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
军训自我鉴定100字
2014/02/13 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
优秀党员申报材料
2014/12/18 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python