javascript针对cookie的基本操作实例详解


Posted in Javascript onNovember 30, 2015

本文实例讲述了javascript针对cookie的基本操作。分享给大家供大家参考,具体如下:

js被C#、JAVA等开发者视为声名狼藉的附属编程语言是有道理的,比如说,对cookie的操作。js就没有一套类似C#的现成处理方案,而只能由你自己去完成。下面我就将自己学习的用面向对象的思想对cookie进行处理的学习笔记整理一下,以飨读者。

cookie的常见操作分析:

(1)设置cookie 包括了添加和修改功能,事实上如果原有cookie 名称已经存在,那么添加此cookie 就相当于修改了此cookie。在设置cookie 的时候可能还会有一些可选项,用于指cookie  的声明周期、访问路径以及访问域和安全性等等。为了让cookie 中能够存储中文,该方法中还需要对存储的值进行编码。

(2)取一个cookie的值,该方法接收cookie 名称为参数,返回该cookie 的值。因为在存储该值的时候已经进行了编码,所以取值时应该能自动解码,然后返回(这里其实可以自己设置返回什么,而不单单是"取一个值"而已)。

(3)删除一个cookie,删除cookie 只需将一个cookie 的过期事件设置为过去的一个时间即可,它接收一个cookie 的名称为参数,从而删除此cookie(我的实现还将cookie名称设置为空,这是考虑到今后可能会有多个cookie要设置的时候,名称发生冲突的情况)。

(4)其他 (这里让读者自己去考虑其他的操作,不赘述了。)

好的,你一定又猜到我要说什么了,对头,code is cheap.看代码:

/* 对cookie的操作 */
//创建
var Cookie = new Object();
//设置(修改)属性和方法
Cookie.setCookie = function(sName, sValue, oExpires, sPath, sDomain, bSecure) {
  var sCookie = sName + "=" + escape(sValue); // 名称和值
  if (oExpires) {
    sCookie += "; expires=" + oExpires.toGMTString(); // 过期时间
  }
  if (sPath) {
    sCookie += "; path=" + sPath; // 访问路径
  }
  if (sDomain) {
    sCookie += "; domain=" + sDomain; // 访问路径
  }
  if (bSecure) {
    sCookie += "; true"; // 安全性
  }
  document.cookie = sCookie;
}
//获取
Cookie.getCookie = function(sName) {
  var cookieArray = document.cookie.split(";"); //得到分割的名值对
  var tempCookie = new Object();
  for (var i = 0; i < cookieArray.length; i++) {
    var tempArr = cookieArray[i].split("="); //将名称和值分开
    if (tempArr[0] == sName) { //如果是指定的cookie,返回它的值
      return unescape(tempArr[1]);
    }
  }
  return "There's no such a cookie name!";
}
//删除
Cookie.deleteCookie = function(sName, sPath, sDomain) {
  var sCookie = sName + "=; expires=" + (new Date(0)).toGMTString(); // 设置名称为空,过期时间为0,也可以设置过期时间为负数 (var sCookie = sName + "=; expires=-1"; )
  if (sPath) {
    sCookie += "; path=" + sPath;
  }
  if (sDomain) {
    sCookie += "; domain=" + sDomain;
  }
  document.cookie = sCookie;
}
function test() {
  Cookie.setCookie("test", "cookieTest");
  alert(Cookie.getCookie("test"));
  alert(Cookie.getCookie("test2")); // ???
  Cookie.deleteCookie("test");
  alert(Cookie.getCookie("test"));
}

补充:javascript 操作cookie类

String.prototype.Trim = function()
{
  return this.replace(/^\s+/g,"").replace(/\s+$/g,"");
}
function JSCookie()
{
  this.GetCookie = function(key)
  {
    var cookie = document.cookie;
    var cookieArray = cookie.split(';');
    var getvalue = "";
    for(var i = 0;i<cookieArray.length;i++)
    {
      if(cookieArray[i].Trim().substr(0,key.length) == key)
      {
        getvalue = cookieArray[i].Trim().substr(key.length + 1);
        break;
      }
    }
    return getvalue;
  };
  this.GetChild = function(cookiekey,childkey)
  {
    var child = this.GetCookie(cookiekey);
    var childs = child.split('&');
    var getvalue = "";
    for(var i = 0;i < childs.length;i++)
    {
      if(childs[i].Trim().substr(0,childkey.length) == childkey)
      {
        getvalue = childs[i].Trim().substr(childkey.length + 1);
        break;
      }
    }
    return getvalue;
  };
  this.SetCookie = function(key,value,expire,domain,path)
  {
    var cookie = "";
    if(key != null && value != null)
      cookie += key + "=" + value + ";";
    if(expire != null)
      cookie += "expires=" + expire.toGMTString() + ";";
    if(domain != null)
      cookie += "domain=" + domain + ";";
    if(path != null)
      cookie += "path=" + path + ";";
    document.cookie = cookie;
  };
  this.Expire = function(key)
  {
    expire_time = new Date();
    expire_time.setFullYear(expire_time.getFullYear() - 1);
    var cookie = " " + key + "=e;expires=" + expire_time + ";"
    document.cookie = cookie;
  }
}

用法:

一、设置cookie

var cookie = new JSCookie();
//普通设置
cookie .SetCookie("key1","val1");
//过期时间为一年
var expire_time = new Date();
expire_time.setFullYear(expire_time.getFullYear() + 1);
cookie .SetCookie("key2","val2",expire_time);
//设置域及路径,带过期时间
cookie .SetCookie("key3","val3",expire_time,".cnblogs.com","/");
//设置带子键的cookie,子键分别是k1,k2,k3
cookie .SetCookie("key4","k1=1&k2=2&k3=3");

二、读取cookie

//简单获取
cookie .GetCookie("key1");
cookie .GetCookie("key2");
cookie .GetCookie("key3");
cookie .GetCookie("key4");
//获取key4的子键k1值
cookie .GetChild("key4","k1");

三、删除

cookie .Expire("key1");
cookie .Expire("key2");
cookie .Expire("key3");
cookie .Expire("key4");

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jquery 学习笔记一
Apr 07 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
Sep 09 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
Feb 27 Javascript
js正则表达式匹配数字字母下划线等
Apr 14 Javascript
JS实现仿QQ聊天窗口抖动特效
May 10 Javascript
JavaScript生成SQL查询表单的方法
Aug 13 Javascript
每天一篇javascript学习小结(属性定义方法)
Nov 19 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
Apr 15 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
Sep 05 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
Jan 13 Javascript
js判断手机系统是android还是ios
Mar 07 Javascript
js回溯法计算最佳旅行线路代码实例
Sep 11 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 #Javascript
详解JavaScript的流程控制语句
Nov 30 #Javascript
详解JavaScript的表达式与运算符
Nov 30 #Javascript
Bootstrap每天必学之进度条
Nov 30 #Javascript
javascript省市区三级联动下拉框菜单实例演示
Nov 29 #Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 #Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 #Javascript
You might like
桌面中心(一)创建数据库
2006/10/09 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP大文件分块上传功能实例详解
2019/07/22 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
Vue 数据响应式相关总结
2021/01/28 Vue.js
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
使用phonegap操作数据库的实现方法
2017/03/31 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
电气专业推荐信范文
2013/11/18 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
运动会通讯稿150字
2014/02/15 职场文书
政府法律服务方案
2014/06/14 职场文书
运动会100米加油稿
2015/07/21 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫