Cookie 主要是在客户端进行一些简单的数据存储等,使用来提供本地化存储的脚本功能。Cookie 的处理环境本身是需要在服务器下进行的,但是现在的大部分浏览器都已经支持Cookie本地化的存储于处理。

一  Cookie 的组成

Cookie 是由名/值对组成:name=value;  完整的形式为:

name=value;[expires=过期时间];[path=路径限制];[domain=域名限制];[secure].其中前面的name=value是必选,后面中括号中的内容是可选,每一个选项之间用分号隔开。

name=value:就是存储在Cookie文件中的cookie名称和对应的值,name和value都是开发人员自己取的名字,后存储的会将先存储的进行覆盖掉,最好是用encodeURIComponent()方法对其进行编码。

expires=过期时间:这个是可可选项,是用来设置当前cookie的过期时间的,当过了这个时间后,浏览器会自动的清理此cookie,如果不设置默认的在浏览器关闭的时候将此cookie选项给清理掉。

domain=域名限制:设置了此项目,用于限制只有设置的域名才可以访问,那么没有设置,会默认限制为创建cookie 的域名,如果待访问的域名和设置的域名不一样是不能够访问的。如果设置域名访问,必须在当前域名绑定的服务器上面设置,如果在当前域名绑定的服务器上面任意设置其它域名是不能够设置成功的,这样创建也不能够成功。并且,如果设置为www.baidu.com那么在这个域名下的所有页面都可以访问当前cookie,而如果设置为baike.baidu.com
则只能是这个二级域名中的网页来访问这个cookie文件,主域名和其它同级的二级域名是不能够访问则个cookie的。

path=限制路径:访问路径, 当设置了路径, 那么只有设置的那个路径文件才可以访问 cookie

secure:安全设置,指明必须通过安全的通信通道来传输(HTTPS)才能获取 cookie。。通过普通的HTTP来使无法获取指明了由secure保存的cookie的,即使本地也不行

代码:

<span style="font-size:18px;">document.cookie = "user3="+encodeURIComponent('你是谁');

var date=new Date();
date.setDate(date.getDate()+3);
var path="/G:/"
document.cookie="ppp=abced;expires="+date+'path='+path; document.cookie="user=wanzheng;domain=yc60.com;path=/;expires='+date+';secure";</span>

二  封装方法

1、设置Cookie文件

从上面可以看出如果每一个cookie都这样写的话,有点麻烦,可以通过封装成一个方法来进行cookie的获取和设置。JS由于是弱类型的语言,对调用的函数的参数个数的匹配要求也并不严格,在下面的cookie设置函数中,如果有的参数没有传递过来,也是不会报错的。如果中间有的参数不传递,但要传递两边的参数,那么中间的参数用null代替即可

<span style="font-size:18px;">//cookie 名称,值,过期时间,限制路径,限制域名,限制安全连接
function setCookie(name,value,expires,path,domain,secure){
var strCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);<span style="white-space:pre"> </span>//对分号也会进行一个编码
if(expires instanceof Date){
strCookie += ';expires = ' + expires;
}
if(path){
strCookie += ';path=' + path;
}
if(domain){
strCookie += ';domain=' + domain;
}
if(secure){
strCookie += ';secure';
}
document.cookie = strCookie;
}</span>

2、获取Cookie文件

通过documen.cookie 就可获取当前页面设置的所有的cookie文件,但是,返回的是一个字符串,是cookie文件夹下所有的名值对用分号和空格组成的字符串,格式如下:

<span style="font-size:18px;">document.cookie='user=abcd';
document.cookie='email=ema;il@qq.com'; //分号如果不进行编码的话,后面的是存不进去的
document.cookie='email2=email@qq.com';
document.cookie='numb=1235';
alert(document.cookie); //user=abcd; email=ema; email2=email@qq.com; numb=1235</span>

但是通常情况下,我们都是希望通过Cookie名称来获得值,所有封装一个方法:

<span style="font-size:18px;">//根据传递过来的cookie名称,获得值
function getCookie(name){
var cookName = encodeURIComponent(name) + "=";
//先用正则表达式来精确匹配,是否存在,如果不存在就直接返回
var flage=document.cookie.match(new RegExp('(\\s|^)' + cookName));//每个名值对之前都有一个空格,但是开始的第一个没有
if(! flage){
return;
}
//获得传递过来的缓存名在缓存字符串中的索引,如果不存在就返回的是-1
var startIndex = document.cookie.indexOf(cookName);
var cookValue = null; if(startIndex > -1){
var endIndex = document.cookie.indexOf(';',startIndex); //从起始位置开始检索分号的位置
if(endIndex == -1){ //是最后一个cookie
endIndex = document.cookie.length;
}
cookValue = decodeURIComponent(document.cookie.substring(startIndex+cookName.length,endIndex));
}
return cookValue;
}</span>

3、对设置Cookie时的时间的处理

在设置cookie的时候,一般是通过传递一个天数,然后就可以设置它的过期时间等,故封装成一个方法:

<span style="font-size:18px;">//用户传递一个保存的天数,返回过期的日期
function getDate(day){
var date = null;
if(typeof day == 'number' && day > 0){
date = new Date();
date.setDate(date.getDate() + day);
}else{ //抛出一个异常,或者也可以设置为当前的天数
throw new Error('您传递的天数不合法,必须是大于0的整数') }
return date;
}</span>

4、调用方法设置和获取Cookie文件

<span style="font-size:18px;">setCookie('user','abcd',getDate(3));
setCookie('email','qim;st@qq.com',getDate(4)); //传递分号过去,会自动进行编码
alert(document.cookie); <span style="white-space:pre"> </span>//输出的时候是将所有的缓存用分号和空格隔开连接
alert(document.cookie);
alert(getCookie('user'));
alert(getCookie('email')); //通过用正则表达式进行精确的匹配后,这个问题就能够解决
alert(getCookie('ail')); //这个同样有返回值,和上面这个是一样的
alert(getCookie('ai')); </span>

三  Cookie 的一些局限性

第一:每个特定的域名下最多生成 20 个 cookie(根据不同的浏览器有所区别) 。
1.IE6 或更低版本最多 20 个 cookie
2.IE7 和之后的版本最多可以 50 个 cookie。 IE7 最初也只能 20 个, 之后因被升级不定后增加了。
3.Firefox 最多 50 个 cookie
4.Opera 最多 30 个 cookie
5.Safari 和 Chrome 没有做硬性限制。

为了更好的兼容性,所以按照最低的要求来,也就是最多不得超过 20 个 cookie。当超过指定的 cookie 时,浏览器会清理掉早期的 cookie。IE 和 Opera 会清理近期最少使用的 cookie,Firefox 会随机清理 cookie。

第二、cookie 的最大大约为 4096 字节(4k),为了更好的兼容性,一般不能超过 4095 字节即可。

第三:cookie 存储在客户端的文本文件,所以特别重要和敏感的数据是不建议保存在cookie 的。比如银行卡号,用户密码等。

四  一些其它的存储方法

1、IE提供的利用Css属性来存储

IE 提供了一种存储可以持久化用户数据,叫做 userData,从 IE5.0 就开始支持。每个数据最多 128K,每个域名下最多 1M。这个持久化数据存放在缓存中,如果缓存没有清理,那么会一直存在。这个数据文件也是保存在 cookie 目录中,只要清除 cookie 即可。如果指定过期日期,则到期后自动删除,如果没有指定就是永久保存。

但是此种方法在IE11中已经不再支持

<span style="font-size:18px;"><div style="behavior:url(#default#userData)" id="box"></div>
window.onload=function(){
var box = document.getElementById("box");
box.setAttribute("name",'abced');
box.expires = setCookieDate(7); //直接点属性设置
box.save('user'); box.load('user');
alert(box.getAttribute('name')); box.removeAttribute('name'); //删除缓存中的文件
box.save('user')
})</span>

2、Web存储

在比较高的浏览器中,JavaScript 提供了 sessionStorage 以及localStorage。 localStorage是HTML5中替代老版本的globalSession的。

//Web存储,这个其实不是写在cookie文件中的,是写在缓存中的
//sessionStorage.setItem('user','abcde'); //通过方法来设置和读取 alert(sessionStorage.getItem('user')); //读取文件
sessionStorage.removeItem('user'); //移除文件
alert(sessionStorage.getItem('user')); //null //通过属性的方式来设置和获取
sessionStorage.book = 'woshiyiebshu';
alert(sessionStorage.book);
localStorage.book='nishiehnm';
alert(localStorage.book);
localStorage.setItem("she",'hehehe');
alert(localStorage.getItem('she'));
alert(localStorage.getItem('book'));
localStroage.removeItem('book');
alert(localStorage.book);

这三个对象[sessionStorage,globalStroage,localStorage]都是永久保存的,保存在缓存里,只有手工删除或者清理浏览器缓存方可失效。 在容量上也有一些限制, 主要看浏览器的差异, Firefox3+、 IE8+、 Opera 为 5M,Chrome 和 Safari 为 2.5M。

												

JS--中的 Cookie 与存储的更多相关文章

  1. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  2. 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...

  3. js中的cookie使用

    在网上找到的资料,收藏一下 function getCookies(name) { var arr = document.cookie.match(new RegExp("(^| )&quo ...

  4. 在jsp页面的js中使用Cookie的原理介绍以及相应方法的代码

    1. 设置cookie 1.1 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="user_Id=828&q ...

  5. js中对cookie的操作及json数据与cookie结合的用法

    cookie的使用 添加cookie 添加cookie:document.cookie = “key=value”; // 一次写入一个键值对 document.cookie = 'test1=hel ...

  6. JS中浏览器的数据存储机制

    一.JS中的三种数据存储方式 cookie.sessionStorage.localStorage 二.cookie 1.cookie的定义: cookie是存储在浏览器上的一小段数据,用来记录某些当 ...

  7. js 中的cookie

    根据智能社31cookie基础与应用总结, cookie的特性: 1.同一个网站,共用一套cookie,实际上是根据域名来区分的. 如t.sina.com.cn ,和weibo.com这两个都是新浪微 ...

  8. js中的cookie

    cookie就是一个存放数据的东西,存储量很小4kb,存放在客户端上和应用设备上. 应用场景 用户注册,用户登录,购物车. Chrome浏览器在计算机中存放cookie的位置 C:\Users\Adm ...

  9. js中实现cookie的增删改查(document.cookie的使用详情)

    一.设置cookie的值 1.每个cookie都是一个名称/值对,名称/值对用等号连接,并将该名称/值对赋值给document.cookie即可.如:document.cookie="id= ...

  10. js中的cookie使用和vue-cookie的使用

    在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaScrip ...

随机推荐

  1. 官网下载Spring dist

    新版Spring官网下载Spring的dist可真是麻烦 跟着下面的贴图走吧,有些在网页的下面,需要打开相应页面后往下拉拉. 下载完后解压lib里面就是各种jar包了 真是麻烦啊,不好找,不过Spri ...

  2. Asp.net MVC4 Knockoutjs BootStrap Ace NinJect Jqgrid sqlserver2008

    Asp.net MVC4 Knockoutjs  BootStrap Ace NinJect  Jqgrid sqlserver2008

  3. Eval is Devil-MongoDB master/slave上运行Eval遇到的问题

    随便写一句,以免有跟我一样的人遇到这个问题. 驱动版本:MongoDB C# Driver 1.7.0 当在Master/Slave集群上使用Eval的时候,Eval操作只会在Master结点上运行, ...

  4. 使用memcached实现tomcat集群session共享

    环境centos6.7,下载安装必要的软件:yum -y install epel-release(tomcat7在此源上,tomcat7是现在主流版本) yum -y install tomcat ...

  5. 短信接口调用以及ajax发送短信接口实现以及前端样式

    我们短信api用的是云信使平台提供的非免费短信服务:官网提供的demo有两种,分别是function加其调用.class文件加其调用. 在这里我们用class文件加调用: 首先,ThinkPHP里面自 ...

  6. php spl

    最近在重构后台,自写rbac,发现自己在设计模式方面尤为欠缺,没有一个长远的目光,所以打算静下心来看一看自己平时不关注的功能,spl就是其中之一. spl是Standard PHP Library(P ...

  7. 直接拿来用!超实用的Java数组技巧攻略[转]

    来自csdn http://www.csdn.net/article/2013-09-16/2816947-methods-for-java-arrays 本文分享了关于Java数组最顶级的11大方法 ...

  8. 成为JAVA GC专家系列

    http://www.360doc.com/content/13/0305/10/15643_269387617.shtmlhttp://www.360doc.com/content/13/0305/ ...

  9. button与submit

    原文来自: http://blog.sina.com.cn/s/blog_693d183d0100uolj.html submit是button的一个特例,也是button的一种,它把提交这个动作自动 ...

  10. 排序 选择排序&&堆排序

    选择排序&&堆排序 1.选择排序: 介绍:选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始 ...