- cookie的种植
- cookie的设置
- 设置单个cookie
- cookie参数
- 设置多个cookie
- 设置单个cookie
- cookie的访问
- 注意事项
cookie的种植
浏览器自己并不能决定是否设置cookie(当然你可以通过调试器手动往里添加cookie),在它第一次访问服务器的时候,服务器如果有需要会向浏览器传达种植cookie的命令,这样在它第二次访问服务器的相同地址时会带上这个种植的cookie
cookie的设置
设置单个cookie
res.setHeader('Set-Cookie','name=ahhh; Path=/read; Max-Age=30; Expires=Fri, 16 Mar 2018 16:15:22 GMT; HttpOnly; Secure');
可以发现一个cookie内部是使用 ;空格 来分隔cookie-param的
//res中
Set-Cookie: name=ahhh; Path=/read; Max-Age=30; Expires=Fri, 16 Mar 2018 16:15:22 GMT; HttpOnly; Secure
cookie参数
cookie参数主要是针对 作用域、有效时间 两个方面。只有在规定的范围内,cookie才会显示、生效。
作用域的修饰包括 :
Domain: 访问的域名必须是Domain规定的域名Path: 必须是以规定的Path的开头的(比如/read,/read/1,/read/1/2)路径才能访问该cookieHttpOnly: 只有通过 http请求才能查看到cookie,不再能通过浏览器控制台查看,这意味着浏览器端不再能手动更改服务器所种植的cookie(但我们仍然能通过curl等其它方式作为客户端传递'虚假'cookie)Secure:必须是https协议才能查看
有效时间的修饰包括
Max-Age:相对时间,单位为S,设置时单位为毫秒(express中)Exipres:绝对时间,且为UTC格式,设置时单位为毫秒(express中)
设置多个cookie
node中允许我们通过数组的形式设置多个cookie
req.setHeader('Set-Cookie',[cookie1,cookie2...])
如果你想在Node.js通过多次req.setHeaderSet-Cookie来达到设置多个cookie的效果,前面的是会被后面的覆盖的
但在在响应报文里多个cookie的设置却是通过多个Set-Cookie关键字来区分告诉浏览器它是设置了多个cookie的
Set-Cookie: ahhh=111; Path=/read; Max-Age=10; HttpOnly; Expires=Fri, 16 Mar 2018 16:29:56 GMT
Set-Cookie: age=123
cookie的获取
req.headers['cookie']
cookie访问时不会显示cookie的参数设置,另外多个cookie之间依然是用 ;空格 隔开的
ahhh=111; age=123
注意事项
- 指定了path,只会在指定path下才看得到cookie,甚至是在浏览器的cookie查看器中也是!
- 请留意是否开启了
Secure,开启的话只能在https下访问到该cookie - Max-Age的单位是S
