JavaScript: Cookie 详解、实例与应用
Cookie(也)是JavaScript中的一种机制,可以实现严格的跨页面全局变量的要求。
Cookie是存于用户硬盘的一个文件,这个文件通常对应于一个域名,当浏览器再次访问这个域名时,便使这个cookie可用。因此,cookie可以跨越一个域名下的多个网页,但不能跨越多个域名使用。
在Cookie设置中,用escape()函数进行编码,可避免乱码和特殊字符问题; 当使用escape()编码后,在取出值以后需要使用unescape()进行解码才能得到原来的cookie值。
设置Cookie时可以直接给document.cookie赋值:
2document.cookie="userName=hulk";
而且后面的值不会覆盖前面的值,它具有一种累加机制。
cookie的值可以由document.cookie直接获得,但这样获取的是所有的cookie值;要通过一指定cookie名称来获得所对应的值,则需做一些处理。
构造通用的cookie处理函数:
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
下面我来编写一个登录函数,加强理解和应用
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代码的页面文件,如下:
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方法):
/**//***
* 读取指定的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 代码部分:
function init()
{
// 从Cookie中读取用户名信息
var username = GetCookie("username");
// 如果用户已经登录过
if(username && username.length >0)
{
// 显示欢迎信息
$("msg").innerHTML = "<h2>欢迎光临:"+ username + "!</h2>";
}
else
{
$("msg").innerHTML = "<a href='Page1.html'>请返回,登录!</a>";
}
}
function $(id)
{
return document.getElementById(id);
}
// HTML body部分
<body onload="init()">
<div id="msg"></div>
</body>
另外,关于删除Cookie,可以使用以下方法:
该函数可以删除指定名称的cookie:
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
JavaScript: Cookie 详解、实例与应用相关推荐
- [转自脚本之家] Javascript cookie 详解
cookie概述 在上一节,曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的,尽管这样能达到一个模拟 全局变量的功能,但并不严谨.例如在导航框架页面内右击,单击快捷菜单中的[刷新]命 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- HTTP Cookie详解
HTTP Cookie详解 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时 ...
- JavaScript 数据类型详解(对象、set、map)
在上一篇博客中我已经详细介绍了JavaScript 中的字符串和数组,没看过的戳[JavaScript 数据类型详解(字符串.数组)]哦,现在我们来看看对象(Object)和 ES6 新增的 Set ...
- cookie详解(含vue-cookie)
今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...
- 常用经典SQL语句大全完整版--详解+实例 (存)
常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012 http://blog.sina.com.cn/s/blog_84 ...
- JavaWeb Cookie详解
代码地址如下: http://www.demodashi.com/demo/12713.html Cookie的由来 首先我们需要介绍一下,在Web开发过程中为什么会引入Cookie.我们知道Http ...
- Message,MessageQueue,Looper,Handler详解+实例
Message,MessageQueue,Looper,Handler详解+实例 原文地址 Android的Handler使用(这篇简单介绍Handler的使用) 一.几个关键概念 1.Message ...
- Javascript 函数详解
Javascript 函数详解 1)函数声明: 通过关键字function定义,把函数作为变量来声明 函数声明后不会立即执行,会在我们需要的时候调用到. <script>function ...
最新文章
- 2009年全国计算机软件考试推荐用书目录
- openssl php api,PHP7使用openssl解密易班API中的用户数据
- leetcode116. 填充每个节点的下一个右侧节点指针
- IDEA连接mysql报Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' 的错误
- java gc 循环引用_JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制...
- 做报表的朋友偷偷告诉我月薪5w的秘密:让报表动起来
- Python按行读取txt文件
- HTML仿网易云音乐首页静态,用 Vue.js 模仿一个简单的网易云音乐
- Activiti6详细教程
- 无线射频识别技术开发与应用学习视频
- 凯撒密码加密算法python_信息安全与密码学的关系
- 出口托收结算方式DA、DP、CAD详解
- Java创建单例模式(singleton)的几种实现方式
- CALIPSO数据批量下载方法
- Python概述:C++程序员眼中的Python
- Android拍照指定尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸...
- 转载】泡MM与GOF的23种模式(看着挺有意思)
- Google人脸识别系统Facenet paper解析
- 赛尔号什么时候支持html5,赛尔号:最初的5只年费精灵,总被云玩家吊打,其实他们很强...
- 移动IP研究之分享几个代理服务器
热门文章
- .net 垃圾回收学习[How To: Use CLR Profiler][翻译学习]【2】
- DotNet软件开发框架
- UDP sendto和recvfrom使用详解
- GIS开源库shapeLib的使用方法
- java模拟网易邮箱登录_求赐教:网易邮箱Web端模拟登录看信的加密参数_ntes_nnid、_ntes_nuid...
- 如何让fragment刷新界面_快速实现android版抖音主界面的心得
- 神经网络模型遇到瓶颈?这些Tricks让你相见恨晚!
- android 使用javascript,可以在Android中使用JavaScript吗?
- vue如何过滤html标签,去除富文本中的html标签及vue、react、微信小顺序中的过滤器...
- java maven部署_eclipse中maven项目部署到tomcat