【读书笔记--cookie】JavaScript权威指南 第六版
遇到一些问题需要用cookie处理,正好读了一下犀牛书关于cookie的介绍,整理了一些笔记。
cookie是指web浏览器存储的少量数据,同时它是与具体的web页面或者站点相关的。
cookie数据会自动在web浏览器和web服务器之间传输,因此服务器端脚本就可以读、写存储在客户端的cookie值。
在JavaScript中,cookie用于保存状态以及能够为web浏览器提供一种身份识别机制。
但是在JavaScript中使用cookie不会采用任何加密机制,因此它们是不安全的。但是,通过https来传输cookie数据是安全的,不过这和cookie本身无关,而和https:协议有关。
cookie属性:有效期和作用域
除了名(name)和值(value),cookie还有一些可选的属性来控制cookie的有效期和作用域。
cookie的作用域是通过文档源和文档路径来确定的。该作用域通过cookie 的path和domain属性也是可配置的。
但是值得注意的是,cookie的path属性不能被用做访问控制机制。
cookie 的作用域默认由文档源限制。但是,有的大型网站想要子域之间能够相互共享cookie。这个时候就需要通过设置cookie的domain属性来达到目的。
cookie的域只能设置为当前服务器的域。
cookie的属性是secure ,它是一个布尔类型的属性,用来表明cookie的值以何种形式通过网络传递。
cookie默认是以不安全的形式(通过普通的、不安全的HTTP连接)传递的。
而一旦cookie被标识为"安全的",那就只能当浏览器和服务器通过https或者其他的安全协议连接是才能传递它。
保存cookie
给当前文档设置默认有效期的cookie值:
name = value;
document.cookie = "version = " + encodeURLComponent(document.lastModified);
由于cookie的名/值中的值是不允许包含分号、逗号和空白符,因此,在储存前一般可采用JavaScript核心全局函数encodeURLComponent()对值进行编码。
相应的,读取cookie值的时候需要采用decodeURLComponent()进行解码。
延长cookie的有效期,需要设置max-age属性来指定cookie的有效期(单位是秒)。
name = value;max-age = seconds;
通过一个函数来设置一个cookie,同时提供一个可选的max-age属性:
/*
*以名/值的形式储存cookie
*同时采用encodeURLComponent()函数进行编码,来转义分号、逗号和空白符
*如果daysToLive是一个数字,设置max-age属性为该属性值表示cookie直到指定的天数。
*到了才会过期。如果daysToLive是0就表示删除cookie
*/
function setcookie(name,value,daysToLive) {
var cookie = name + "=" encodeURLComponent(value);
if(typeof daysToLive ==="number")
cookie += "; max-age = " + (daysToLive*60*60*4);s
document.cookie = cookie;
}
如果要设置cookie的path、domain和secure属性,只需在存储cookie值前,以如下字符串形式追加在cookie值后面:
;path = paht
;domain = domain
;secure
要改变cookie的值,需要使用相同的名字、路径和域,但是新的值重新设置cookie的值。
同样的,设置新的max-age属性就可以改变原来cookie的有效期。
要删除一个cookie,需要使用相同的名字、路径和域,然后指定一个任意(非空)的值,并且将max-age属性指定为0,再次设置cookie
读取cookie
使用JavaScript表达式来读取cookie属性的时候,返回的值是一个字符串,该字符串都是由一系列名/值对组成,
不同名/值对之间通过”分号和空格“分开,其内容包含了所有作用在当前文档的cookie。
但是,它并不包含其他设置的cookie属性。通过document.cookie属性可以获取cookie的值,但是为了更好的查看cookie的值,
一般会采用split()方法将cookie值中的名/值对分离出来。
定义一个getcookie()函数,该函数将document.cookie属性的值解析出来,将对应的名/值对储存到一个对象中,函数最后返回该对象。
解析document.cookie属性值
/*
*将document.cookie的值以名/值对组成的一个对象返回
*假设储存cookie的值的时候是采用encodeURLComponent()函数编码的
*/
function getcookie(){
var cookie = {}; //初始化最后要返回的对象
var all = document.cookie; //在一个大写字符串中获取所有的cookie值
if (all === "") { //如果该cookie属性值为空字符串
return cookie; //返回一个空对象
}
var list = all.split(";");//分离出名/值对
for(var i = 0;i<list.length;i++) { //遍历每个cookie
var cookie = list[i];
var p = cookie.indexOf("="); //找到第一个”=“符号
var name = cookie.substring(o,p); //获取cookie名字
var value = cookie.substring(p+1); //获取cookie对应的值
value = decodeURLComponent(value);//对其进行解码
cookie[name] = value; //将名/值对储存到对象中
}
retuen cookie;
}
【读书笔记--cookie】JavaScript权威指南 第六版的更多相关文章
- 《JavaScript权威指南 第六版 中文版》(一)
<JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...
- 【笔记】javascript权威指南-第六章-对象
对象 //本书是指:javascript权威指南 //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...
- [在读] javascript权威指南第六版
耽搁了有大半年没看,记得当时看到5分之2了吧.权威指南是不管读几遍都能觉得有新收获的书^^
- JS 语言核心(JavaScript权威指南第六版)(阅读笔记)
前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...
- JavaScript权威指南第六版(阅读笔记)
前言: 对于软件行业学习是无止境的,因为知识更替非常快,能够快速稳固掌握一门新技术是一个程序员应该具备的基本素质. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思想需要细心和大量实践才能慢慢 ...
- javascript权威指南第六版学习
第二章 语法结构 2.1 字符集 什么是字符集?各种字符集什么关系?unicode,utf-8是什么关系? 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...
- Note | Javascript权威指南[第六版] 第1章:Javascript概述
JavaScript是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.JavaScript的语法源自Java,它的一等函数(first-class function)来 ...
- Note | javascript权威指南[第六版] 第2章:词法结构
语法结构规定了诸如变量名是什么样的.怎么写注释,以及程序语句之间如何分隔等规则.本章用很短的篇幅来介绍JavaScript的词法结构. 2.1.字符集 JavaScript程序是用Unic ...
- 第六章 对象-javaScript权威指南第六版
什么是对象? 对象是一种复合值,每一个属性都是都是一个名/值对.原型式继承是javaScript的核心特征. 对象常见的用法有,create\set\query\delete\test\enumera ...
随机推荐
- Vue打包后页面出现cannot get
学习Vue有大半个月了,然而遇到了不少坑,完全没有高手们那么容易,中间有不少值得记录下的东东,回头好好理理.先理下今天的: Vue打包命令简单啊,直接在命令行输入:npm run build 然而没一 ...
- Thread.sleep 与Thread.currentThread.sleep
参考博客: https://blog.csdn.net/guangyinglanshan/article/details/51645053 公司项目近段时间要使用thread, 个人想去了解Threa ...
- grunt + sass 使用记录
环境依赖 Nodejs for grunt Ruby for sass 配置文件 package.json { "name": "app", "ver ...
- 《Unity預計算即時GI》笔记:一、基本概念与一些设置
说明 这篇文章是对<Unity預計算即時GI>这个系列文章的笔记. 基本概念 在Unity裡,可以用兩種不同的技術來計算全域光照GI或光源反射,就是烘焙全域光照(Baked GI)和預計算 ...
- ubuntu14.04server下安装scala+sbt工具
安装sbt参考https://www.cnblogs.com/wrencai/p/3867898.html 在安装scala时 首先得安装jdk环境,最好安装最新版本以免后续安装出现不必要的麻烦 一. ...
- HDU3954 线段树(区间更新 + 点更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3954 , 一道比较好的线段树题,值得做. 题目是NotOnlySuccess大神出的,借此题来膜拜一下 ...
- VM安装centOS6.9
1.首先要下载一个centos的iso镜像,用VMware创建一个空白硬盘. 2.创建完毕再设置里面挂载iso的centos系统文件. 3.进入到这个页面: 说明: ①install or upgra ...
- php之基础深入---类与对象篇
1.类的自动加载: spl_autoload_register()函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载,这样可以避免includ ...
- 64位系统中为VS2012添加OpenGL工具包
之前一直都是按照网上教程进行的添加,以前使用的系统是32位的,所以一直都没有问题.最近换了64位系统,要使用到OpenGL,于是就又进行了原来的工作,但进行测试时,老是失败: 但是在目录:" ...
- hdu-1317 XYZZY---Floyd判连通+bellman最短路
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 题目大意: 题意:有n个房间(n<=100),每个房间有一个点权(第1号房间和第n号房间 ...