Cookie简明小册

767 阅读2分钟
  • 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)路径才能访问该cookie
  • HttpOnly : 只有通过 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