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. JQuery.tmpl()的用法

    动态请求数据来更新页面是现在非常常用的方法,现在通过Ajax请求返回的数据更多的是json对象, 为了解决js动态拼接数据这方面的问题,JavaScript 也可以利用模版来解决这些问题,比如基于 j ...

  2. C# 中解决页面刷新后字体等变大问题

    来源:http://blog.csdn.net/wcsjsdn/article/details/5109605 我们在.net开发中时常会遇到一个问题,那就是,当点击某个按钮后,调用js语句,当点击& ...

  3. LevelDB:一个快速轻量级的key-value存储库(译)

    作者:Jeff Dean, Sanjay Ghemawat 原文:http://leveldb.googlecode.com/svn/trunk/doc/index.html 译者:phylips@b ...

  4. DTD 知识归纳总结

    一:在xml文件中引用一个dtd规则. <!DOCTYPE 根元素 [元素声明]> 二: xml文档中中包含的内容模块 元素:元素是 XML 以及 HTML 文档的主要构建模块. 属性:属 ...

  5. C++判断对称三位数素数

    题目内容:判断一个数是否为对称三位数素数.所谓“对称”是指一个数,倒过来还是该数.例如,375不是对称数,因为倒过来变成了573. 输入描述:输入数据含有不多于50个的正整数(0<n<23 ...

  6. mongodb 3.2存储目录结构说明

    [root@hadoop1 mongodb]# tree ./data ./data |-- WiredTiger | |-- WiredTiger.lock | |-- WiredTiger.tur ...

  7. 第一节:CLR寄宿

    本系列文章来自 CLR VIA C# .NET FrameWork在Microsoft  Windows平台的顶部运行.这意味着.NET必须用Windows可以理解的技术来构建.首先,所有的托管模块和 ...

  8. App.config的学习笔记

    昨天基本弄清config的使用之后,再看WP的API,晕了.结果WP不支持system.configuration命名空间,这意味着想在WP上用App.config不大可能了. WP具体支持API请查 ...

  9. Windows上搭建android开发环境

    在搭建android开发环境时需要四部分内容,框架如下 其中Java SDK和Eclipse在java4android中有过介绍,重点介绍ADT和Android SDK的安装. 安装Android S ...

  10. Python 爬虫实例

    下面是我写的一个简单爬虫实例 1.定义函数读取html网页的源代码 2.从源代码通过正则表达式挑选出自己需要获取的内容 3.序列中的htm依次写到d盘 #!/usr/bin/python import ...