JavaScript: Cookie 详解、实例与应用

Cookie(也)是JavaScript中的一种机制,可以实现严格的跨页面全局变量的要求。

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

在Cookie设置中,用escape()函数进行编码,可避免乱码和特殊字符问题; 当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的cookie值。

设置Cookie时可以直接给document.cookie赋值:

1document.cookie="userId=828";
2document.cookie="userName=hulk";


而且后面的值不会覆盖前面的值,它具有一种累加机制。
cookie的值可以由document.cookie直接获得,但这样获取的是所有的cookie值;要通过一指定cookie名称来获得所对应的值,则需做一些处理。

构造通用的cookie处理函数:

 1<script type="text/javascript">
 2 /**//***
 3 * 设置Cookie (通用函数)
 4 * @param {string} cookieName Cookie 名称
 5 * @param {string} cookieValue Cookie 值
 6 * @param {string} nDays Cookie 过期天数
 7 */

 8 function SetCookie(cookieName, cookieValue, nDays)
 9 {
10     /**//* 当前日期 */
11     var today = new Date();
12 
13     /**//* Cookie 过期时间 */
14     var expire = new Date();
15
16     /**//* 如果未设置nDays参数或者nDays为0,取默认值 1 */
17     if(nDays == null || nDays == 0
18        nDays = 1;
19     
20      /**//* 计算Cookie过期时间 */
21      expire.setTime(today.getTime() + nDays * 24 * 60 * 60 * 1000); //获取毫秒数
22       
23      /**//* 设置Cookie值 */
24      document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=" + expire.toGMTString();
25 }
 
26

  
   下面我来编写一个登录函数,加强理解和应用

 1 // 登录函数
 2 function login()
 3 {
 4    // 用户名
 5    var username = $("user").value;
 6    
 7    // 用户密码
 8    var password = $("pass").value;
 9
10    // 我们这里设置一额外条件,交友登录用户选择
11     // 是否7天内无需再登录,即可访问
12     var save = $("save").checked;
13    
14    // 这里,假设一合法的用户名/密码是 admin/admin
15    if(username == "admin" && password == "admin")
16    {
17       // 在Cookie中保存用户名
18        if(save) 
19          SetCookie("username",username,7);
20       else
21          SetCookie("username",username,1);
22    
23       // 通过验证,跳转到下一页面
24        document.location = "page2.html";
25    }

26    else
27    {
28       alert("用户名或密码错误!");
29    }

30 }

31
32 function $(id)
33 {
34    return document.getElementById(id);
35 }

36
37</script>


调用(或称 嵌入)以上Js代码的页面文件,如下:

 1 //Page1.html 的 body 部分,其他省略
 2 <body>
 3  <div id="main">
 4    <div>
 5       <span>用户名:</span> <input type="text" id="user" />
 6    </div>
 7    <div>
 8       <span>密 码:</sapn> <input type="password" id="pass" />
 9    </div> 
10    <div>
11       <input type="checkbox" id="save" /> 七天内无需登录
12    </div>
13    <div>
14       <input type="button" onclick="login()" value="登 录" />
15    </div>
16 </body>


页面效果 如下所示:


前面讲到

设置Cookie时,可以直接给 document.cookie 赋值:
    document.cookie="userId=828";
    document.cookie="userName=hulk";
而且后面的值不会覆盖前面的值,它具有一种 累加机制


Page2.html内部页面(你可以先这样理解),必须在登录后才能使用。该页面需要对用户当前PC的Cookie进行判断,如果发现用户已经通过该机器登录过,该页面则显示 欢迎信息,否则显示“请登录”的链接。

Page2.html页面的代码如下(下面分开说明):
(1) Js代码 (通用读取Cookie方法):
 

 <script type="text/javascript">
 
/**//*** 
 * 读取指定的Cookie值
 * @param {string} cookieName Cookie名称
 
*/


 
// 方法一:
 function GetCookie(cookieName)
 
{
    
/**//* Cookie 字符串 */
    
var theCookie = "" + document.cookie;

    
/**//* 找到cookieName的位置 */
    
var ind = theCookie.indexOf(cookieName);

    
/**//* 如果未找到cookieName,返回空字符串 */
    
if(ind == -1 || cookieName == "")
       
return "";
    
     
/**//* 确定分号的位置 */
     
var ind1 = theCookie.indexOf(';', ind);
     
if(ind1 == -1
          ind1 
= theCookie.length;
     
     
/**//* 读取Cookie值 */
     
return unescape(theCookie.substring(ind+cookieName.length + 1, ind1));
 }


 
// 方法二:
 function GetCookie(cookieName)
 
{
    
var strCookie=document.cookie;

    
// 将多cookie切割为多个名/值对
    var arrCookie=strCookie.split(""); 

    
for(var i=0;i<arrCookie.length;i++)
   

      
// 遍历cookie数组,处理每个cookie对
       var arr=arrCookie[i].split("=");
     
      
// 找到名称为cookieName的cookie,并返回它的值
       if(arr[0]=="username")
      
return arr[1];
   }

     
return "";
}


(2) Page2.html HTML 代码部分:
    

  // Page2.html 页面初始加载执行的Js代码:
  function init()
  {
     // 从Cookie中读取用户名信息
      var username = GetCookie("username");
   
     // 如果用户已经登录过
      if(username && username.length >0)
     {
        // 显示欢迎信息
         $("msg").innerHTML = "
<h2>欢迎光临:"+ username + "!</h2>";
     }
     else
     {
        $("msg").innerHTML = "
<href='Page1.html'>请返回,登录!</a>";
     }
  }

   function $(id)
   {
      return document.getElementById(id);
   }

   // HTML body部分
   
<body onload="init()">
      
<div id="msg"></div>
   
</body>


另外,关于删除Cookie,可以使用以下方法:
该函数可以删除指定名称的cookie:

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

   
function deleteCookie(username){
   
var date=new Date();
   
// // 删除一个cookie,就是将其过期时间设定为一个过去的时间
   date.setTime(date.getTime()-10000); 
   document.cookie
=name+"=v; expire=" + date.toGMTString();
}

</script> 

 

转载于:https://www.cnblogs.com/Dlonghow/archive/2008/07/10/1240109.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑可以装windows系统吗_不只是桌面,这个 Windows 皮肤可以帮你全局美化 Windows 系统

追求个性化是个永恒不变的需求&#xff0c;而在主题这件事情上&#xff0c;和 Windows XP 那个百花齐放的时代相比&#xff0c;我们在 Windows 10 下能够享受到的官方主题大多都只是换换壁纸、改改配色这么简单。而在千篇一律的官方主题之外&#xff0c;美化社区的 Windows 10 …

SQL Server 2005: 存储过程签名

SQLSERVER 2005提供的对存储过程签名(signature)功能是我最喜欢的。如果我们要编写一个存储过程,执行该存储过程里的代码需要权限P,并且我们想要用户Alice可以执行这个存储过程&#xff0c;但是我们不想将权限P直接赋予给用户Alice&#xff0c; 我们可以用证书(certificate)对这…

手机能上wifi电脑不行_锦囊在此(电脑手机如何配置使用WIFI)

1.路由器接入电源(以下是以TP-LINK为例&#xff0c;其他路由器大同小异&#xff0c;重要是在于关闭DHCP服务器选项)2.打开电脑WIFI连接路由器(找对路由器名称&#xff0c;见路由器底标)(建议不要接入网线&#xff0c;配置好再接入网线)3.打开浏览器输入路由器后台网址(见路由器…

8位可控加减法电路设计_100以内数的认知也加减法详解

一、100 以内数的认识1、10个十是100,读作一百。100 是由10个十或100个一组成,它是一个三位数。2、数数时,可以一个一个的数,也可以二个二个的数,五个五个的数,十个十个的数。3、从右边起,第一位是个位,第二位是十位,第三位是百位。4、读数和写数,都从高位起。当计数器上个位或…

如何在电脑上截屏_如何在电脑上截图?教你6种常用的截图方法,总有你不知道的...

无论是在学习上还是在工作中&#xff0c;我们都经常会用到电脑&#xff0c;特别是在工作中&#xff0c;每天都是与电脑相伴&#xff0c;遇到重要的文字信息或者好看的图片&#xff0c;都会想尽办法截取下来&#xff0c;所以今天就教大家几种电脑截图的方法。1、截图工具这个截图…

ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

第三章 为控件添加事件 好了&#xff0c;我们之前以前开发一个控件。而且也添加了属性&#xff0c;开发也很规范&#xff0c;但是那个控件还差最后一点&#xff1a;添加事件。 系列文章链接:ASP.NET自定义控件组件开发 第一章 待续ASP.NET自定义控件组件开发 第一章 …

pioneer dvr-xd50 固件_闲的蛋疼的验证:索尼 SONY WH1000XM3固件版本差异

坊间一直流传&#xff0c;索尼WH-1000XM3的新固件版本降噪性能要比老的更差&#xff0c;即最早期的2.x.x版本的降噪性能要比目前的4.x.x更好。这也让不少WH-1000XM3的用户一直停留在2.x版本不升级&#xff0c;甚至动用比较麻烦的方法去对耳机做固件降级。出于闲的蛋疼的原因&am…

python接口测试_Python接口自动化测试(一)

本节开始&#xff0c;开始介绍python的接口自动化测试&#xff0c;首先需要搭建python开发环境&#xff0c;到https://www.python.org/下载python版本直接安装就以了&#xff0c;建议下载python2.7.11版本&#xff0c;当然&#xff0c;也是可以下载python最新版本。 接口测试是…

刷recovery工具apk_红米note4X刷lineage,不喜欢miui10广告臃肿的可以试一试

经常在miui和各个类原生安卓系统间换来换去&#xff0c;不过miui10现在是越来越垃圾了&#xff0c;广告、耗电、臃肿&#xff0c;我现在已经逐步抛弃miui了&#xff01;小白可以看我的帖子做个参考&#xff0c;刷机其实是特别简单的是&#xff0c;只要一步步来&#xff0c;总会…

干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑

众所周知&#xff0c;在化工和石化这类流程行业当中&#xff0c;稳定性和持续性是至关重要的生产“命脉”&#xff0c;对于生产过程中使用的测量仪表有着极其严格的要求。不仅所有测量仪表都必须满足严苛的国际标准&#xff0c;如PED和ATEX&#xff0c;压力、温度及液位等电子和…

WCF学习(五)数据契约之已知类型

准备技术&#xff1a; 1.C#基础知识 2.了解WCF基础知识 在正常的c#开发中我们是允许用子类去替换基类的&#xff0c;这也是所谓的替换原则。但是我们在WCF中确不能用数据契约的子类来替换父类的&#xff0c;因为这中间存在一个序列化的问题。举个例子&#xff1a; 我们有数据契…

win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...

现在的电脑&#xff0c;基本上都安装的是Win10系统了&#xff0c;7寸屏的迷你笔记本电脑GPD Pocket 2琥珀黑版也不例外&#xff0c;GPD Pocket 2采用的是赛扬双核3965y处理器&#xff0c;8G运行内存&#xff0c;处理办公应用可以说是游刃有余&#xff0c;但是Win10系统有一些选…

iTunes只能装C盘吗_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...

我们在使用电脑时为了对电脑文件的方便管理&#xff0c;往往会对电脑进行分区&#xff0c;比如C&#xff0c;D&#xff0c;E&#xff0c;F盘等&#xff0c;其中C盘默认为系统盘&#xff0c;用于存储操作系统的重要文件&#xff0c;而C盘的分区大小也是许多朋友在安装操作系统时…

上海梵科信息科技有限公司

1. a5, b(a)(a)(a), printf("%d",b); 答案&#xff1a;19 2. 表students&#xff0c;有id, classid, name, score。 班级为4的所有学生&#xff1f; 答案&#xff1a;select * from students where classid4 每个班级的学生总数&#xff1f; 答案&#xff1a;select …

python36安装numpy_安装numpy

为了运行机器学习书上的实例&#xff0c;安装numpy.照着网上教程安装的&#xff0c;网上教程 1&#xff09;下载numpy包 自己的是python3.5, 64位操作系统&#xff0c;所以选择numpy-1.11.2mkl-cp35-cp35m-win-amd64.whl 2&#xff09;安装numpy 将下载的包拷贝到python安装目录…

WCF Testing Tool(转)

原文:http://jayce.clearviewtickets.info/wcftestingtool.html best video: wcf testing tool IIS7 Admin Pack Offers Built In Performance Analysis Reports Are you web developer building high traffic web site? Are you performance engineer that lives and breath…

python制作简单动画_如何使用python制作简单的动画?

Python真的是无穷的好用&#xff0c;涉及内容非常广泛&#xff0c;比如接下来给大家介绍的制作动画&#xff0c;就可以利用python实现&#xff0c;相信小伙伴们听到这些内容肯定是非常感兴趣的&#xff0c;至于怎么去实现&#xff1f;大家想不想了解呢&#xff1f;下面小编就给…

clickhouse语句_篇四|ClickHouse的可视化界面与集群状态监控

介绍 tabix支持通过浏览器直接连接 ClickHouse&#xff0c;不需要安装其他软件&#xff0c;就可以访问ClickHouse&#xff0c;具有以下特点&#xff1a;⾼亮语法的编辑器。⾃动命令补全。查询命令执⾏的图形分析⼯具。配⾊⽅案选项。除此之外&#xff0c;还可以使用DBeaver连接…

apache为什么更适合处理动态请求_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...

前言文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/bin392328206种一棵树最好的时间是十年前&#xff0c;其次是现在six-finger-web一个Web后端框架的轮子从处理Http请求【基于Netty的请求级Web服务器】 到mvc【接口封装转发)】&#xff0c;再…

python如何自动缩进_Python缩进

缩进出现问题&#xff0c;运行不出来。 正确代码如下&#xff1a;1 defbinary_search(list, item):2 low 03 high len(list)-1 4 5 while low <high:6 mid (low high)7 guess list[mid]8 if guess item:9 returnmid10 if guess >item:11 high mid-1 12 else:13 low m…