浅谈JS-cookie,你是香甜可口的小点心吗?
引言:
想必大家一定听过或看过浏览器cookie,早在nokia雄霸天下、我们还不太明白浏览器的时候,cookie就已经悄悄地存在于浏览器的“设置选项”中了。当时它的用途仅仅是让你选择是否“清除”。年少的我很纳闷,这“甜点”(cookie在英语中的解释)是什么意思?
光阴如梭,直到接触到web开发才发现自己以前对cookie的理解是多么可笑,哈哈哈。。。
cookie在浏览器中是什么作用呢?果断找度娘,cookie用来存储网站或用户的数据、行为等信息。比如:用户设置网站的主题,网站将相关的数据记录存在cookie中;用户登录帐户后,点击“记住用户名”,可以使用cookie来记录;网站打开有个弹窗,其中有一个“不再提示”的选项,果断 get√,下次打开就不会出现这个弹窗。。。等等的小例子,大家明白其中的作用吧!
揭露秘密的时刻:
我们来看看你的浏览器下 baidu.com 的cookie吧!
聪明的少年们很快就能注意到,cookie是document下的一个方法。根据经验,document.cookie 可以读取浏览器的cookie值,是不也可以添加或设置cookie值呢?
(注意点:想在本地测试测试浏览器cookie,推荐使用firefox浏览器,其他浏览器可能没有效果。)
cookie的大小依据不同的浏览器而定,一般为4KB,而且服务器语言如PHP,Java等也能操作cookie。
给网站添加cookie:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
window.onload = function() {
addCookie();
} function addCookie() {
document.cookie = "123=123";
document.cookie = "abc=abc";
}
</script>
</body>
</html>
我们来看看浏览器下的变化吧!
当我们添加cookie是,语句中的 " = " 其实有两个含义:
- 当cookie名称相同是,为覆盖的作用
- 当cookie名称不同时,为添加操作
浏览器下出现了两条cookie记录,每条记录之间以 '; '分隔(记得分号后面必须要有空格)。在firebug展现的表格中有“过期时间”和“最长有效期”两项值得我们注意。
设置cookie的有效期:在添加浏览器cookie时,有这样的一个参数来设置cookie的有效期(也可以叫做过期时间):expires
代码走起:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script>
window.onload = function() {
setCookie('name', 'value', 10);
} function setCookie(name, value, expiredays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie=name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
</script>
</body>
</html>
上面的代码可以方便的实现本站点下cookie的创建、修改、删除的功能,那么我们如何获取具体的cookie值呢?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<input type="text" id="input" placeholder="获取cookie值" /> <button id="getCookie">获取cookie值</button>
<p id="values"></p>
<script>
window.onload = function() {
setCookie('name01', 'value01', 10);
setCookie('name02', 'value02', 10);
setCookie('name03', 'value03', 10);
setCookie('name04', 'value04', 10); document.getElementById("getCookie").onclick = function(){
var inputValue = document.getElementById('input').value;
document.getElementById('values').innerHTML = '';
if(inputValue!=''){
getCookieValue(inputValue);
}else{
document.getElementById('values').innerHTML = "<span style='color:red;'>输入错误</span>";
}
};
}
function getCookieValue(cName){
var cookieArry = document.cookie.split("; ");
for (var i = 0; i < cookieArry.length; i++) {
var cookieSubArry = cookieArry[i].split("=");
if(cookieSubArry[0]==cName){
document.getElementById('values').innerHTML = cookieSubArry[1];
}
};
} function setCookie(name, value, expiredays){
var exdate=new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie=name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
</script>
</body>
</html>
简单分析:
我们使用 document.cookie.split("; "); 来分割获取的cookie记录,在 for 循环中二次切割每一条 cookie记录,这样的话我们就能够轻松地获取想要的啦!
浅谈JS-cookie,你是香甜可口的小点心吗?的更多相关文章
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
浅谈JS中的!=.== .!==.===的用法和区别 var num = 1; var str = '1'; var test = 1; test == num //tr ...
- 浅谈JS之AJAX
0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...
- 浅谈JS中的闭包
浅谈JS中的闭包 在介绍闭包之前,我先介绍点JS的基础知识,下面的基础知识会充分的帮助你理解闭包.那么接下来先看下变量的作用域. 变量的作用域 变量共有两种,一种为全局变量,一种为局部变量.那么全局变 ...
- 浅谈 js 正则字面量 与 new RegExp 执行效率
原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...
- 浅谈 js 字符串之神奇的转义
原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...
- 浅谈 js 正则之 test 方法
原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. var re = /\d/; console. ...
- 浅谈 js 数字格式类型
原文:浅谈 js 数字格式类型 很多人也许只知道 ,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是 ...
- 浅谈 js 语句块与标签
原文:浅谈 js 语句块与标签 语句块是什么?其实就是用 {} 包裹的一些js代码而已,当然语句块不能独立作用域.可以详细参见这里<MDN block> 也许很多人第一印象 {} 不是对象 ...
- 浅谈 js 字符串 trim 方法之正则篇
原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格 等 ...
随机推荐
- HTML中的<meta>标签的使用
HTML中<meta>标签的使用 在我们制作的网页中,要是想让它能够让更多的人去访问,最好的方法就是通过搜索引擎来找到你的网址,于是需要你的网页可以有关键词能够让搜索引擎来识别,于是HTM ...
- [Medium翻译]RESTful API权威设计指南-设计更好的API
本文为授权译文.希望查看原文的同学请戳链接:https://hackernoon.com/restful-api-design-step-by-step-guide-2f2c9f9fcdbf 对于我们 ...
- OOP导论系列---抽象过程
OOP导论系列---抽象过程 所有编程语言都提供抽象机制.可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型和质量.所谓“类型”是指“所抽象的是什么?”你可以抽取待求解问题的任何概念化构件,如: ...
- 卡常三连(快读快写+re)
快读: inline int in() { char ch; ; '))); a*=;a+=ch-'; ,a+=ch-'; return a; } 快写: inline void out(int a) ...
- spring-quartz 定时器 给targetMethod传递参数
今天在做一个项目的时候,要给一个定时器任务的执行方法传递参数,在网上找了一下资料,可以使用arguments参数: <bean id="subsidyJobDetail" ...
- vue调用豆瓣API加载图片403问题
"豆瓣API是有请求次数限制的”,这会引发图片在加载的时候出现403问题,视图表现为“图片加载不出来”,控制台表现为报错403. 其实是豆瓣限制了图片的加载,我自己用了一个办法把图片缓存下来 ...
- go加密算法:非对称加密(二)--Hash
关于一些加密算法的应用和信息,可以在以下博客中查找到: https://www.cnblogs.com/charlesblc/p/6130141.html // MyHash package main ...
- .Net Core使用Redis-从安装到使用
一.安装 本文使用的操作系统是Centos7 在Redis中文网下载最新的Redis压缩包:http://www.redis.cn/ 把包上传到Liunx服务器上,cd 到包所在的目录执行以下命令 # ...
- 高性能MySQL--innodb中事务的隔离级别与锁的关系
最近买了<高性能MySQL>这本书回来看,从中收益颇多!我来一吐为快! 我们都知道事务,那么在什么情况下我们需要使用事务呢? 银行应用是解释事务的一个经典例子.假设一个银行的数据库有两张表 ...
- php5.4以上 mysqli 实例操作mysql 增,删,改,查
<?php //php5.4以上 mysqli 实例操作mysql header("Content-type:text/html;charset=utf8"); $conn ...