cookie是浏览器 提供的一种机制,它将document 对象的cookie属性提供给JavaScript。可以由JavaScript对其进行控制,而并不是JavaScript本身的性质。

cookie是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。

一、设置cookie 

1、单个cookie

每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:   document.cookie="userId=828"; 

2、多个cookie

如果要一次存储多个名/值对,可以使用分号加空格(; )隔开,例如: document.cookie="userId=828; userName=hulk";

但是,在cookie 的名或值中不能使用分号(;)、逗号(,)、等号(=)以及空格。在cookie的名中做到这点很容易,但要保存的值是不确定的。如何来存储这些值呢?

方法是:用escape()函数进行编码,它能将一些特殊符号使用十六进制表示,例如空格将会编码为“20%”,从而可以存储于cookie值中,而且使用此种方案还可以避免中文乱码的出现。

例:document.cookie="str="+escape("I love ajax");    相当于:  document.cookie="str=I%20love%20ajax";

使用escape()编码后,在取出值以后需要使用 unescape()进行解码 才能得到原来的cookie值。

二、获取cookie的值

cookie的值可以由document.cookie直接获得:  var strCookie=document.cookie; 

 如果要获取指定的cookie值,须自己分析这个字符串:

<script type="text/javascript">
//设置两个cookie
//给document.cookie赋值像执行类似这样的语句:document.addCookie("userId=828"); document.addCookie("userName=hulk");
document.cookie = "userId=828";
document.cookie = "userName=hulk"; //改变它的赋值,原来的赋值不会丢失,浏览器同时维护两个cookie
var strCookie = document.cookie; // 获取cookie字符串
// alert(strCookie); //// userId=828;userName=hulk
var arrCookie = strCookie.split(";"); //从分号的位置 分割字符串strCookie为字符串数组
// alert(arrCookie); //// userId=828,userName=hulk 数组:["userId=828","userName=hulk"]
var userId;
//遍历cookie数组,处理每个cookie对
for(var i=0;i<arrCookie.length;i++){
var arr = arrCookie[i].split("="); //从 = 的位置 分割每对cookie if( arr[0] == "userId" ){ //如果前面是 userId 就是找到了
userId = arr[1]; //将后面的值赋给 userId ,跳出循环
break;
}
}
alert(userId);
</script>

三、给cookie设置终止日期

到现在为止,所有的cookie都是单会话cookie,即浏览器关闭后这些cookie将会丢失,事实上这些cookie仅仅是存储在内存中,而没有建立相应的硬盘文件。在实际开发中,cookie常常需要长期保存,例如保存用户登录的状态。

方法如下:

<script language="JavaScript" type="text/javascript"> 

      var date=new Date();     //获取当前时间
var expiresDays = 10; date.setTime( date.getTime() + expiresDays*24*3600*1000 ); //将date设置为当前时间后的10天 //将userId和userName两个cookie设置为10天后过期
document.cookie = "userId=828;userName=hulk;expires="+date.toGMTString(); </script>

四、删除cookie

为了删除一个cookie,可以将其过期时间设定为一个过去的时间,例如:

<script type="text/javascript"> 

var date=new Date();    //获取当前时间 

date.setTime(date.getTime()-10000);    //将date设置为过去的时间

//将userId这个cookie删除
document.cookie="userId=828; expires="+date.toGMTString(); </script>

五、指定可访问cookie的路径 

1、默认情况下,如果在某个页面创建了一个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访问。

2、为了控制cookie可以访问的目录,需要使用path参数设置cookie,语法: document.cookie="name=value; path=cookieDir";     (   cookieDir表示可访问cookie的目录  )
eg:     document.cookie="userId=320; path=/shop";        表示当前cookie仅能在shop目录下使用。

3、如果要使cookie在整个网站下可用,可以将cookie_dir指定为根目录:   document.cookie="userId=320; path=/";

4、指定可访问cookie的主机名和路径类似,主机名是指同一个域下的不同主机,例如:www.google.com和gmail.google.com就是两个不同的主机名。

默认情况下,一个主机中创建的cookie在另一个主机下是不能被访问的,但可以通过domain参数来实现对其的控制,其语法格式为: document.cookie="name=value; domain=cookieDomain"; 
以google为例,要实现跨主机访问,可以写为: document.cookie="name=value;domain=.google.com";    这样,所有google.com下的主机都可以访问该cookie。

六、构造通用的cookie处理函数

定义几个函数来完成cookie的通用操作,从而实现代码的复用。下面列出了常用的cookie操作及其函数实现:

1.添加一个cookie:   addCookie(name,value,expiresHours) 
该函数接收3个参数:cookie名称,cookie值,以及在多少小时后过期。这里约定expiresHours为0时不设定过期时间,即当浏览器关闭时cookie自动消失。如下:

<script type="text/javascript"> 

function addCookie(name,value,expiresHours){ 

   var cookieString=name+"="+escape(value); 

   if(expiresHours>0){    //判断是否设置过期时间
var date=new Date();
date.setTime(date.getTime+expiresHours*3600*1000);
cookieString=cookieString+"; expires="+date.toGMTString();
} document.cookie=cookieString; }
</script>

2.获取指定名称的cookie值:getCookie(name) 
该函数返回名称为 name 的 cookie 值,如果不存在则返回空,如下:

<script type="text/javascript"> 

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 ""; }
</script>

3.删除指定名称的cookie:deleteCookie(name) 
该函数可以删除指定名称的cookie,如下:

<script type="text/javascript"> 

   function deleteCookie(name){ 

        var date=new Date(); 

        date.setTime(date.getTime()-10000); 

        document.cookie=name+"=v; expires="+date.toGMTString(); 

    } 

</script> 

JS操作cookie的更多相关文章

  1. jquery.cookie.js 操作cookie实现记住密码功能的实现代码

    jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下.   复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...

  2. JS操作cookie以及本地存储(sessionStorage 和 localStorage )

    JS操作cookie cookie的操作用两种方式 1.substring //创建cookie function setCookie(name,value,expires,path,domain,s ...

  3. js操作cookie,实现登录密码保存 [转]

    转自:http://blog.csdn.net/zyujie/article/details/8727828 ( 谢谢博主了) js操作cookie,实现登录密码保存.cookie的存放方式是以键值对 ...

  4. 转: js操作cookie

    cookie的几个概念 http://dearhappyfish.blog.163.com/blog/static/1901094152012422114753777/ js操作cookie 转:ht ...

  5. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。

    jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...

  6. js 操作 cookie

    js 操作 cookie 的方法如下: //设置cookie function setCookie(cname, cvalue, exdays) { var d = new Date(); d.set ...

  7. 使用纯生js操作cookie

    前段时间做项目的时候要使用js操作cookie,jquery也有相应的插件,不过还是觉得纯生的js比较好,毕竟不依赖jq. //获得coolie 的值 function cookie(name) { ...

  8. js操作cookie(转载:经测试可用)

    /***js操作cookie,star***/ function addCookie(objName,objValue,objsec){//添加cookie  var str = objName + ...

  9. 分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站

    上一篇介绍了分布引导插件IntroJs的使用,本篇介绍通过Js操作cookie的方法. 分步引导的功能只适合与第一次登陆网站的新用户,不能每次登陆都提示分布引导,那么如何判断用户是否第一次登录网站呢? ...

  10. node.js操作Cookie

    node.js操作Cookie http://www.tuicool.com/articles/F3UF7n

随机推荐

  1. UIImage加载本地图片的两种方式

    UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片 ...

  2. 【数据采集】VBA数据采集可用 COM 组件

    windows 中提供了4个COM组件都可以进行数据采集. Wininet WinHttp XmlHttp MSHTML https://msdn.microsoft.com/en-us/librar ...

  3. kettle系列-1.kettle源码获取与运行

    第一次写博客,心里有点小激动,肯定有很多需要改进的地方,望海涵. kettle算是我相对较为深入研究过的开源软件了,也是我最喜欢的开源软件之一,它可以完成工作中很多体力劳动,在ETL数据抽取方面得到了 ...

  4. Maven 更换远程仓库地址

    1.第一种方式,通过setting.xml的方式配置数据源 该文件路径D:\IDE\apache-maven-3.2.3\conf\setting.xml 该文件大部分内容都已经注释,我们需要添加如下 ...

  5. 微软的R语言发行版本MRO及开发工具RTVS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软在收购R语言的开发商后,也独立发行或在自己的产品中集成了R语言,这里就介绍下它们包 ...

  6. (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?

    转自:http://blog.chinaunix.net/uid-23069658-id-3160506.html 本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之 ...

  7. JS截字符串处理数字,汉字,英文问题

    <script> function suolve( str,sub_length ){ var temp1 = str.replace(/[^\x00-\xff]/g,"**&q ...

  8. Daily Scrum Meeting ——SixthDay

    一.Daily Scrum Meeting照片 佳恺请假了...可能去约会了罢 二.Burndown Chart 欣慰,但是还是感到"鸭梨山大"! 三.项目进展 1.活动列表查询功 ...

  9. Quick Apps for Sharepoint小型BI解决方案

    Quick Apps for Sharepoint介绍 Quick Apps for Sharepoint前身是Quest Webpart ,由企业软件开发商QuestSoftware开发,Quest ...

  10. jvm的垃圾回收原理

    什么是垃圾回收? 垃圾回收是Java中自动内存管理的另一种叫法.垃圾回收的目的是为程序保持尽可能多的可用堆(heap). JVM会删除堆上不再需要从堆引用的对象. 用一个例子解释垃圾回收? 比方说,下 ...