遇到一些问题需要用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权威指南 第六版的更多相关文章

  1. 《JavaScript权威指南 第六版 中文版》(一)

    <JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...

  2. 【笔记】javascript权威指南-第六章-对象

    对象 //本书是指:javascript权威指南    //以下内容摘记时间为:2013.7.28 对象的定义: 1.对象是一种复合值:将很多值(原始值或者对象)聚合在一起,可以通过名字访问这些值. ...

  3. [在读] javascript权威指南第六版

    耽搁了有大半年没看,记得当时看到5分之2了吧.权威指南是不管读几遍都能觉得有新收获的书^^

  4. JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  5. JavaScript权威指南第六版(阅读笔记)

    前言: 对于软件行业学习是无止境的,因为知识更替非常快,能够快速稳固掌握一门新技术是一个程序员应该具备的基本素质. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思想需要细心和大量实践才能慢慢 ...

  6. javascript权威指南第六版学习

    第二章 语法结构 2.1 字符集 什么是字符集?各种字符集什么关系?unicode,utf-8是什么关系? 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等 ...

  7. Note | Javascript权威指南[第六版] 第1章:Javascript概述

       JavaScript是一门高端的.动态的.弱类型的编程语言,非常适合面向对象和函数式的编程风格.JavaScript的语法源自Java,它的一等函数(first-class function)来 ...

  8. Note | javascript权威指南[第六版] 第2章:词法结构

      语法结构规定了诸如变量名是什么样的.怎么写注释,以及程序语句之间如何分隔等规则.本章用很短的篇幅来介绍JavaScript的词法结构.   2.1.字符集   JavaScript程序是用Unic ...

  9. 第六章 对象-javaScript权威指南第六版

    什么是对象? 对象是一种复合值,每一个属性都是都是一个名/值对.原型式继承是javaScript的核心特征. 对象常见的用法有,create\set\query\delete\test\enumera ...

随机推荐

  1. C# 只运行一个实例 ShowWindowAsync 窗体隐藏时失效 解决方案

    如果窗体已经隐藏,那么利用instance.MainWindowHandle得到的句柄为空,继而ShowWindowAsync 操作失败 不过我们可以使用FindWindow来查找到指定窗体的句柄 只 ...

  2. bank conflct 一句话总结

    由于最新的多播模式区别于原来的广播模式,原来同一个warp不同线程访问同一个bank的相同地址不再是bank conflict, 现在总结为:只要同一个 warp 的不同线程会访问到同一个 bank ...

  3. es6 随笔

    记录一些学习es6中学习的新特性,挺有用,作为日后复习es6用,便于记忆. 1.变量定义let和const es6用let.const代替,let是定义块级作用域中的变量,const声明之后必须赋值, ...

  4. 用sql语句按周、按月、按季、按年统计

    --按mySql语法统计按周,月,季,年.income为合计的价格字段,createDate为交易时间. select sum(income)as revenue,week(createDate) a ...

  5. python之__init__使用方法

    定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化.比如:class testClass: def __init__(self ...

  6. maven+jenkins发布环境

    安装java省略,下面是环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_65/ export PATH=$JAVA_HOME/bin:$PATH export CLA ...

  7. DELL R730安装ESXI虚拟化

    dell安装esxi需要dell官方提供的镜像文件地址:http://www.dell.com/support/article/us/en/04/SLN290857/dell%E5%AE%9A%E5% ...

  8. linux 查看帐号创建时间

    查看用户的home目录的创建时间 查看日志 用stat 命令,可以看到目录的三个时间.不过这个时间只是用来参考的,确定一个范围. 查看日志是最准确的方法 /var/log/auth.log ,前提是你 ...

  9. Java AES加密算法工具类

    AESCodec.java package util; import java.security.Key; import javax.crypto.Cipher; import javax.crypt ...

  10. Jmeter命令行参数

    一.在linux中,使用非gui的方式执行jmeter.若需更改参数,必须先编辑jmx文件,找到对应的变量进行修改,比较麻烦.因此,可以参数化一些常用的变量,直接在Jmeter命令行进行设置 二.参数 ...