目录
- 测试Cookie的流程
- 过期时间
- 设置
httpOnly
- 设置
Secure
- 跨域问题
0. 概述
-
常用参数
-
max-age
,expires
:设置过期时间。 -
Secure
:协议为https时才发送Cookie。 -
httpOnly
:控制能否被js的document.cookie
访问。
1. 测试Cookie的流程
-
代码
/**
* 1. 测试cookie
*/
const http = require('http')
const port = 9000
http.createServer(function(request, response) {
// 设置两个cookie
response.writeHead(200, {
'Content-Type': 'text/html',
'Set-Cookie': ['name=dyq666', 'sex=male']
})
response.end('<div>It is cookie test!</div>')
}).listen(port)
console.log("listen ", port)
-
第一次的响应头
-
第二次的请求头
-
在浏览器中查看本地Cookie
2. 过期时间
缓存有两个常用的参数:
-
max-age
代表从当前开始延后多长时间过期。 -
expires
到哪个时间过期。
-
不设置参数
-
不设置参数或设置比当前时间小,在关闭浏览器的时候过期。下图展示了不设置过期相关参数时浏览器为我们自动设置的值。
-
关闭浏览器后在查看本地的cookie。
-
设置参数
max-age
设置20秒后过期,在浏览器的cookie页面20秒后刷新即可测试。
'Set-Cookie': ['name=dyq666;max-age=20']
3. 设置httpOnly
查看浏览器的终端即可。
'Set-Cookie': ['name=dyq666;httpOnly']
4. 设置Secure
'Set-Cookie': ['name=dyq666;Secure']
5. 跨域问题
-
概述
发送时只会发送父域名的cookie和自己本身的域名,不会发送其他域名。
-
修改本地的hosts文件,来测试
创建两个二级域名和一个级域名
127.0.0.1 a.test.com
127.0.0.1 b.test.com
127.0.0.1 test.com
-
代码
为子二级域名b.test.com
设置一个cookie,为一级域名test.com
设置一个cookie
/**
* 1. 测试cookie中的domain
*/
const http = require('http')
const port = 9000
http.createServer(function (request, response) {
response.writeHead(200, {
'Content-Type': 'text/html',
'Set-Cookie': ['role=father;domain=.test.com', 'role=son;domain=b.test.com']
})
response.end('<script>console.log(document.cookie)</script>')
}).listen(port)
console.log("listen ", port)
-
测试
在浏览器中分别访问三个域名+端口号,观察响应头参数或者浏览器中的cookie。
-
a.test.com:9000
-
b.test.com:9000
-
test.com:9000