JS--中的 Cookie 与存储
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 与存储的更多相关文章
- 【原创】js中利用cookie实现记住密码功能
在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...
- 在node.js中使用COOKIE
node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...
- js中的cookie使用
在网上找到的资料,收藏一下 function getCookies(name) { var arr = document.cookie.match(new RegExp("(^| )&quo ...
- 在jsp页面的js中使用Cookie的原理介绍以及相应方法的代码
1. 设置cookie 1.1 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="user_Id=828&q ...
- js中对cookie的操作及json数据与cookie结合的用法
cookie的使用 添加cookie 添加cookie:document.cookie = “key=value”; // 一次写入一个键值对 document.cookie = 'test1=hel ...
- JS中浏览器的数据存储机制
一.JS中的三种数据存储方式 cookie.sessionStorage.localStorage 二.cookie 1.cookie的定义: cookie是存储在浏览器上的一小段数据,用来记录某些当 ...
- js 中的cookie
根据智能社31cookie基础与应用总结, cookie的特性: 1.同一个网站,共用一套cookie,实际上是根据域名来区分的. 如t.sina.com.cn ,和weibo.com这两个都是新浪微 ...
- js中的cookie
cookie就是一个存放数据的东西,存储量很小4kb,存放在客户端上和应用设备上. 应用场景 用户注册,用户登录,购物车. Chrome浏览器在计算机中存放cookie的位置 C:\Users\Adm ...
- js中实现cookie的增删改查(document.cookie的使用详情)
一.设置cookie的值 1.每个cookie都是一个名称/值对,名称/值对用等号连接,并将该名称/值对赋值给document.cookie即可.如:document.cookie="id= ...
- js中的cookie使用和vue-cookie的使用
在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaScrip ...
随机推荐
- JSON (仅限本地)
<script type="text/javascript"> setInterval(function() { $("#content").loa ...
- 16)JAVA实现回调(Android,Swing中各类listener的实现)
熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为"回调").Java ...
- jquery跨域调用wcf
使用jquery跨域调用wcf服务的时候会报如下错误 $.ajax({ url: 'http://localhost:28207/Service1.svc/GetData', method: 'get ...
- 【转载】Android通过ksoap2调用.net(c#)的webservice
转载自:http://www.cnblogs.com/badtree/articles/3242842.html ■下载 ksoap2-android 包 去http://code.google.co ...
- Treeview获取父节点
private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object&g ...
- STM32F4_TIM输出PWM波形(可调频率、占空比)
Ⅰ.概述 上一篇文章关于STM32基本的计数原理明白之后,该文章是在其基础上进行拓展,讲述关于STM32比较输出的功能,以输出PWM波形为实例来讲述. 提供实例工程中比较实用的函数:只需要调用该函数, ...
- Python脚本控制的WebDriver 常用操作 <六> 打印当前页面的title及url
下面将使用WebDriver来答应浏览器页面的title和访问的地址信息 测试用例场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例: 假设1个页面的title应该是'hel ...
- Python可以做什么?
Python是一个优秀的程序语言,PYthon的应用角色几乎是无限的,你可以在任何场合应用Python. 1 系统编程 Python提供对系统管理的内部接口,可以搜索文件和目录,可以运行其他程序 Py ...
- JavaScript高级程序设计之基本包装类型
为便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean, Number 和 String // 字符串怎么会有方法呢 var str1 = "some text& ...
- "奇葩家园“之 asyncTask 与 url 下载篇
asyncTask 是android提供的一个轻量级的异步处理的类,有3个泛型参数,params,progress,result params: 启动任务执行的时候传入的参数比如请求的 url 地址 ...