Cookie
Secure只会在https的时候发送
HttpOnly无法通过document.cookie访问
Cookie解决HTTP协议的无状态问题
Cookie是服务器发给客户端浏览器并保存在本地的一小块数据,并且在下一次访问时携带该数据发给服务器
浏览器第一次访问服务器并请求数据 --> 服务器响应浏览器,并且向浏览器发送请求的数据并且携带Cookie数据 --> 浏览器接收到后会把Cookie存储到客户端本地–> 当再次访问该服务器时,发送请求并且携带本地的Cookie --> 服务器接收Cookie并且响应请求的数据 --> 如此往返
1.服务器建立Cookie (浏览器第一次访问服务器)
2.服务器发送Cookie
3.浏览器接收Cookie,浏览器储存Cookie
4.浏览器发送Cookie(浏览器非第一次访问服务器)
5.服务器接收Cookie
现在浏览器现在出现了各种各样的储存方法 cookie逐渐淘汰
Cookie的作用域
Domain和Path标识定义了Cookie的作用域,即Cookie应该发送给那些URL
如果不指定,默认为当前文档的主机(不包含子域名)
如果指定Domain,一般包含子域名
Domain = XXXXX.com 则Cookie也包含子域名
Path标识指定了主机先的那个路径可以接受Cookie,用字符‘%x2F’("/")作为路径分隔符
Cookie的有效期
Max-Age和Expires标识定义了Cookie的有效期
会话期Cookie
存储在浏览器中 关闭浏览器就消失 不需要Max-Age和Expires
持久性Cookie
存储在客户端的电脑中 关闭浏览器也会存在 这个可以定义生存时间
需要Max-Age和Expires
Cookie的应用
会话状态控制(购物车,用户登录状态等)
个性化设置(主题等)
浏览器行为跟踪
访问和更新Cookie
创建Cookie
js通过document.cookie属性来访问和更新cookie
document.cookie = newCookie;
Cookie存储的格式是键值对 一个Cookie可以存储多个键值对 键值对之间用";"隔开
创建
document.cookie = ‘键 = 值;’ //只能对一个cookie进行设置和更新 可能会有多个cookie
读取Cookie
document.cookie会把所有的cookie读出来
allCookies = document.cookie
通过每个cookie之间是用;隔开 所有通过字符串分割可以会的每一个
修改Cookie
因为cookie是键值对 所有通过 键找到对应的cookie 然后通过键修改值
//cookie = ‘键1 = 值1’
document.cookie = ‘键1 = 值2’;
删除Cookie
js中删除Cookie只需要设置Expires标识为以前的时间 这样这个cookie就过期了 就是删除了
HTTP中的Cookie
自动携带Cookie信息
Set-Cookie响应头
服务器使用Set-Cookie响应头向用户代理(一般为浏览器)发送Cookie信息
一个Set-Cookie响应头 对应 一个键值对
Set-Cookie:<cookie名> = <cookie值>
Set-Cookie:<cookie名> = <cookie值>
服务器通过该头部告知客户端保存Cookie的信息
Cookie请求头
一个可以Cookie请求头携带多个键值对
Cookie:<cookie名> = <cookie值>;<cookie名> = <cookie值>.....
Cookie
服务器
const http = require('http');
const fs = require('fs');
http.createServer(function(req,res){
console.log('requset come',req.url);
const host = req.headers.host
if(req.url === '/'){
const html = fs.readFileSync('test.html','utf-8');
if(host === 'test.com'){
res.writeHead(200,{
'Content-Type':'text/html',
'Set-Cookie':['id=123;max-age=2','abc=444;HttpOnly','aaa=bbb;domain=test.com'],//发送时 实际是'Set-Cookie':'id=123;max-age=2'; 'Set-Cookie':'abc=444;HttpOnly';
//写多个cookie时 nodejs中为用数组 每一个都是键值对
//实际上Set-Cookie并不能在一个Set-Cookie上写多个cookie 只不过是nodejs提供的一种便利的写法
//在真正发送时 还是一个Set-Cookie一个cookie键值对 写多个Set-Cookie
//没有设置过期时间就是在关闭浏览器后失效 设置过期时间为max-age= 格式就是上面写的那样
//加上HttpOnly就会禁止js访问这个cookie
//domain是设置让某个域下的所有子域都能访问这个cookie
});
}
res.end(html)
}
}).listen(8888);
// http://127.0.0.1:8888/
客户端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>xxxxaaaawwww</div>
</body>
<script>
console.log(document.cookie)
</script>
</html>