【读书笔记--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 ...
随机推荐
- thymeleaf 模板语言简介
参考网址: https://blog.csdn.net/mlin_123/article/details/51816533 1.1 Thymeleaf 在有网络和无网络的环境下皆可运行,而且完全不需启 ...
- HDU 3351 Seinfeld 宋飞正传(水)
题意: 给出一个串,串内只有大括号,问经过几次改变可使全部括号合法?改变指的是可以将某一方向的括号变成另一方向. 思路: 利用栈的特点,若出现成对的合法括号,直接删掉,留下那些不合法的成为一串.既然不 ...
- 在vue-cli中使用路由
1.首先npm中是否有vue-router 一般在vue-cli的时候就已经下载好了依赖包了 2.使用vue的话正常的需要涉及这几个文件 demo/src/router/index.js import ...
- form.elements属性
form.elements属性与childNodes属性不同的是form.elements只返回的是表单元素组成的数组,包括input,textarea等
- noip模拟赛#23
T1:n个元素的集合.要求取出k个子集,使得k个子集交集为空集.问有多少中取法. =>推了很久...想的是从k等于2的情况推到k等于3的情况....然后k=2推出来了k=3也推出来了...推了挺 ...
- 在TreeView控件节点中显示图片
实现效果: 知识运用: TreeView控件中Nodes集合的Add方法 //创建节点并将节点放入集合中 public virtual TreeNode Add (string key,string ...
- matlplotlib 为折线图填充渐变颜色
概要 本篇记录绘图时填充颜色时的一些常用设置,主要用到了 imshow,fill 函数. 填充图实例 填充的效果图如下: 图 1:渐变色效果图 可根据下方给出的代码进行自定义. #!/us ...
- PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)
http://www.patest.cn/contests/pat-b-practise/1003 “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入 ...
- 拷贝时间测试=cudamelloc+cudahostalloc
/* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and its lic ...
- ASP.NET补充
字典类的子集 using System.Collections.Generic; Dictionary<string, string> dicB = new Dictionary<s ...