一、Cookie概览
Document对象含有一个Cookie属性:document.cookies
可以利用Cookie对象在用户的硬盘上持久的存储数据,
并且能够获取以这种方式存储的数据。
Document对象含有一个Cookie属性:document.cookies
可以利用Cookie对象在用户的硬盘上持久的存储数据,
并且能够获取以这种方式存储的数据。
1、cookie的存储
Cookie的必要的部分:名字、值
name=value的形式
document.cookie = 'username=DaShen';
document.cookie = 'color=red';
2、cookie的读取
读取后是一个所有cookie组成的字符串,是一个name/value对的列表,数对间用分号分开。
因此写入cookie时,value值不能有分号、逗号或空白符,等号。
要读取特定的cookie的值,可以用方法String.indexOf(),String.substring()或者String.split()将字符串分割。
console.log(document.cookie);
3、cookie的过期时间
1、默认情况下
cookie是暂时存在的,
存在浏览器的内存中,当浏览器关闭时,cookie消失,
cookie的生存期和浏览器相同
2、非默认情况下:cookie存在于浏览器的缓存目录的一个文件中
(1)方式一:兼容所有浏览器
expires
(Date.toGMTString()/toUTCString())
//设置cookie的生存期
var now = new Date().getTime();
var temp = now + 1000 * 60 * 60 * 24 * 7;
var time = new Date(temp);
console.log(time.toGMTString());
document.cookie = 'cart=100;expires=' + time.toGMTString();
(2)方式二:支持现代浏览器(老版本ie无效)
max-age(秒)
document.cookie = 'logined=true;max-age=' + 60 * 60 * 24 * 7;
4、cookie的编码和解码
cookie只能处理拉丁字符,因此一般情况下:
在写入之前组要用JavaScript的核心全局函数encodeURIComponent()对写入的值进行编码。
并且读取时使用相应的decodeURIComponent()进行解码
编码:
document.cookie = 'username=' + encodeURIComponent('大神');
解码:
console.log(decodeURIComponent(document.cookie));
二、维护cookie
1、修改cookie
重新设置cookie的值即可
2、删除cookie
针对key设置一个过期时间,
value的值可以任意或为空
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
三、cookie的属性
1、属性
key、value、expires(max-age)、path、domain、secure
必要:key、value
可选:
expires(max-age)、path、domain、secure
2、cookie的一致性
当domain、path、secure、key有任何一个不一致的时候,cookie就不是同一个cookie
(1)修改path:
默认情况下,位于父路径的文件不能读取子目录的文件中设置的cookie的值。
同一个站点,不同目录下的同名cookie是互相独立的。
如果要在不同级别的路径下共享cookie,需要制定相同的path值
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
(2)domain
只能从子域名改到父域名,其他修改不可以
如位于server1.example.com 和 server2.example.com的网页需要共享cookie
则设置他们的domain值都为example.com。
例如:如果当前代码在xxx.jd.com下执行,那么可以执行如下的修改
document.cookie = 'color=blue;path=/;domian=jd.com';
(3)
secure
Secure=true
指定在网络上如何传输cookie
默认是不安全的cookie,可以通过普通的http协议传输。
如果设置为secure,则只能通过https或其他的安全协议传输。
四、局限性和安全性
1、cookie的局限性
- 理论值限制在4kb
- 不能存储敏感数据
- RFC 2965标准规定浏览器最多保存300个cookie(现代浏览器允许cookie总数多于300个)
- 为每个web服务器保存的cookie数不能超过20个
2、数据持久型和安全性
- 使用客户端持久性的方式保存在硬盘上的数据时未加密的。
- 任何形式的客户端持久性都不应该用于任何一种敏感信息。
- 数据持久性是用于扩展用户体验的,并不是用于数据收集的。
document.cookie = 'username=DaShen';
document.cookie = 'color=red';
2、cookie的读取
读取后是一个所有cookie组成的字符串,是一个name/value对的列表,数对间用分号分开。
因此写入cookie时,value值不能有分号、逗号或空白符,等号。
要读取特定的cookie的值,可以用方法String.indexOf(),String.substring()或者String.split()将字符串分割。
读取后是一个所有cookie组成的字符串,是一个name/value对的列表,数对间用分号分开。
因此写入cookie时,value值不能有分号、逗号或空白符,等号。
要读取特定的cookie的值,可以用方法String.indexOf(),String.substring()或者String.split()将字符串分割。
console.log(document.cookie);
3、cookie的过期时间
1、默认情况下
cookie是暂时存在的,
存在浏览器的内存中,当浏览器关闭时,cookie消失,
cookie的生存期和浏览器相同
2、非默认情况下:cookie存在于浏览器的缓存目录的一个文件中
(1)方式一:兼容所有浏览器
expires
(Date.toGMTString()/toUTCString())
//设置cookie的生存期
var now = new Date().getTime();
var temp = now + 1000 * 60 * 60 * 24 * 7;
var time = new Date(temp);
console.log(time.toGMTString());
document.cookie = 'cart=100;expires=' + time.toGMTString();
(2)方式二:支持现代浏览器(老版本ie无效)
max-age(秒)
document.cookie = 'logined=true;max-age=' + 60 * 60 * 24 * 7;
4、cookie的编码和解码
cookie只能处理拉丁字符,因此一般情况下:
在写入之前组要用JavaScript的核心全局函数encodeURIComponent()对写入的值进行编码。
并且读取时使用相应的decodeURIComponent()进行解码
编码:
cookie只能处理拉丁字符,因此一般情况下:
在写入之前组要用JavaScript的核心全局函数encodeURIComponent()对写入的值进行编码。
并且读取时使用相应的decodeURIComponent()进行解码
编码:
document.cookie = 'username=' + encodeURIComponent('大神');
解码:
console.log(decodeURIComponent(document.cookie));
二、维护cookie
1、修改cookie
重新设置cookie的值即可
2、删除cookie
针对key设置一个过期时间,
value的值可以任意或为空
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
三、cookie的属性
1、属性
key、value、expires(max-age)、path、domain、secure
必要:key、value
可选:
expires(max-age)、path、domain、secure
2、cookie的一致性
当domain、path、secure、key有任何一个不一致的时候,cookie就不是同一个cookie
(1)修改path:
默认情况下,位于父路径的文件不能读取子目录的文件中设置的cookie的值。
同一个站点,不同目录下的同名cookie是互相独立的。
如果要在不同级别的路径下共享cookie,需要制定相同的path值
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
(2)domain
只能从子域名改到父域名,其他修改不可以
如位于server1.example.com 和 server2.example.com的网页需要共享cookie
则设置他们的domain值都为example.com。
例如:如果当前代码在xxx.jd.com下执行,那么可以执行如下的修改
document.cookie = 'color=blue;path=/;domian=jd.com';
(3)
secure
Secure=true
指定在网络上如何传输cookie
默认是不安全的cookie,可以通过普通的http协议传输。
如果设置为secure,则只能通过https或其他的安全协议传输。
默认情况下,位于父路径的文件不能读取子目录的文件中设置的cookie的值。
同一个站点,不同目录下的同名cookie是互相独立的。
如果要在不同级别的路径下共享cookie,需要制定相同的path值
document.cookie = 'logined=true;max-age=0';
document.cookie = 'cart=100;expires=' + new Date().toGMTString();
如位于server1.example.com 和 server2.example.com的网页需要共享cookie
则设置他们的domain值都为example.com。
document.cookie = 'color=blue;path=/;domian=jd.com';
指定在网络上如何传输cookie
默认是不安全的cookie,可以通过普通的http协议传输。
如果设置为secure,则只能通过https或其他的安全协议传输。
四、局限性和安全性
1、cookie的局限性
- 理论值限制在4kb
- 不能存储敏感数据
- RFC 2965标准规定浏览器最多保存300个cookie(现代浏览器允许cookie总数多于300个)
- 为每个web服务器保存的cookie数不能超过20个
- 理论值限制在4kb
- 不能存储敏感数据
- RFC 2965标准规定浏览器最多保存300个cookie(现代浏览器允许cookie总数多于300个)
- 为每个web服务器保存的cookie数不能超过20个
2、数据持久型和安全性
- 使用客户端持久性的方式保存在硬盘上的数据时未加密的。
- 任何形式的客户端持久性都不应该用于任何一种敏感信息。
- 数据持久性是用于扩展用户体验的,并不是用于数据收集的。
- 使用客户端持久性的方式保存在硬盘上的数据时未加密的。
- 任何形式的客户端持久性都不应该用于任何一种敏感信息。
- 数据持久性是用于扩展用户体验的,并不是用于数据收集的。