JavaScript实现cookie的写入、读取、删除功能


Posted in Javascript onNovember 05, 2015

在没介绍正文之前,先给大家介绍Cookie的基础知识

首先了解什么是cookie

“cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。”

cookie 是访问过的网站创建的文件,用于存储浏览信息,例如个人资料信息。

从JavaScript的角度看,cookie 就是一些字符串信息。这些信息存放在客户端的计算机中,用于客户端计算机与服务器之间传递信息。

在JavaScript中可以通过 document.cookie 来读取或设置这些信息。由于 cookie 多用在客户端和服务端之间进行通信,所以除了JavaScript以外,服务端的语言(如PHP)也可以存取 cookie。

Cookie 基础知识

cookie 是有大小限制的,每个 cookie 所存放的数据不能超过4kb,如果 cookie 字符串的长度超过4kb,则该属性将返回空字符串。

由于 cookie 最终都是以文件形式存放在客户端计算机中,所以查看和修改 cookie 都是很方便的,这就是为什么常说 cookie 不能存放重要信息的原因。

每个 cookie 的格式都是这样的:<cookie名>=<值>;名称和值都必须是合法的标示符。

cookie 是存在有效期的。在默认情况下,一个 cookie 的生命周期就是在浏览器关闭的时候结束。如果想要 cookie 能在浏览器关掉之后还可以使用,就必须要为该 cookie 设置有效期,也就是 cookie 的失效日期。

alert(typeof document.cookie)结果是 string,曾经我以为是array,还闹过笑话...??br />

cookie 有域和路径这个概念。域就是domain的概念,因为浏览器是个注意安全的环境,所以不同的域之间是不能互相访问 cookie 的(当然可以通过特殊设置的达到 cookie 跨域访问)。路径就是routing的概念,一个网页所创建的 cookie 只能被与这个网页在同一目录或子目录下得所有网页访问,而不能被其他目录下得网页访问(这句话有点绕,一会看个例子就好理解了)。

其实创建cookie的方式和定义变量的方式有些相似,都需要使用 cookie 名称和 cookie 值。同个网站可以创建多个 cookie ,而多个 cookie 可以存放在同一个cookie 文件中。

Cookie常见问题

cookie 存在两种类型:

你浏览的当前网站本身设置的cookie

来自在网页上嵌入广告或图片等其他域来源的 第三方 cookie (网站可通过使用这些 cookie 跟踪你的使用信息)
刚刚基础知识里面有说到 cookie 生命周期的问题,其实 cookie 大致可分为两种状态:

临时性质的cookie。当前使用的过程中网站会储存一些你的个人信息,当浏览器关闭后这些信息也会从计算机中删除
设置失效时间的cookie。就算浏览器关闭了,这些信息业依然会在计算机中。如 登录名称和密码,这样无须在每次到特定站点时都进行登录。这种cookie 可在计算机中保留几天、几个月甚至几年。

cookie 有两种清除方式:

通过浏览器工具清除 cookie (有第三方的工具,浏览器自身也有这种功能)
通过设置 cookie 的有效期来清除 cookie

注:删除 cookie 有时可能导致某些网页无法正常运行

浏览器可以通过设置来接受和拒绝访问 cookie。

出于功能和性能的原因考虑,建议尽量降低 cookie 的使用数量,并且要尽量使用小 cookie。

关于cookie编码的细节问题将会在cookie高级篇中单独介绍。

假如是本地磁盘中的页面,chrome的控制台是无法用JavaScript读写操作 cookie 的,解决办法...换一个浏览器^_^。

本章节分享几段关于javascript对于cookie的简单操作,比如对于cookie的写入和删除。

代码很简单,比较适合对于cookie基本操作还不太熟练的朋友参考。

一.写入cookie:

//两个参数,一个是cookie的名子,一个是值
function SetCookie(name,value){
 var Days = 30;//此 cookie 将被保存 30 天
 var exp = new Date();//new Date("December 31, 9998");
 exp.setTime(exp.getTime() + Days*24*60*60*1000);
 document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}

二.读取cookie:

//取cookies函数  
function getCookie(name){
 var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
 if (arr != null) return unescape(arr[2]); return null;
}

三.删除cookie:

//删除cookie
function delCookie(name){
 var exp = new Date();
 exp.setTime(exp.getTime() - 1);
 var cval = getCookie(name);
 if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
Javascript 相关文章推荐
通过DOM脚本去设置样式信息
Sep 19 Javascript
UI Events 用户界面事件
Jun 27 Javascript
jquery获取当前元素索引值用法实例
Jun 10 Javascript
jQuery拖动元素并对元素进行重新排序
Dec 30 Javascript
jQuery中使用animate自定义动画的方法
May 29 Javascript
详解Jquery Easyui的验证扩展
Jan 09 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
从零开始搭建一个react项目开发
Feb 09 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
关于Vue中axios的封装实例详解
Oct 20 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
JS实现slide文字框缩放伸展效果代码
Nov 05 #Javascript
如何防止JavaScript自动插入分号
Nov 05 #Javascript
javascript常用函数(2)
Nov 05 #Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 #Javascript
javascript常用函数(1)
Nov 04 #Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
Nov 04 #Javascript
jQuery多条件筛选如何实现
Nov 04 #Javascript
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php数组键值用法实例分析
2015/02/27 PHP
javascript json 新手入门文档
2009/12/03 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
python动态监控日志内容的示例
2014/02/16 Python
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python中文件遍历的两种方法
2014/06/16 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
python实现控制台输出颜色
2021/03/02 Python
元宵晚会主持词
2014/03/25 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
组织鉴定材料
2014/06/02 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫