cookie学习

698 阅读2分钟

基本通信过程:

设置cookie -----cookie被自动添加在require header中--服务端收到cookie

cookie是什么

cookie是存储在浏览器中的纯文本,浏览器的安装目录下会专门有一个cookie文件夹存放各个域下设置的cookie

发送请求时,浏览器会自动检查是否有相应的cookie,如果有则自动添加在require header中

什么样的数据适合放在cookie中?

存储在cookie中的数据在每次发送请求的时候都会自动放在http请求中,如果这些数据不是每个请求都需要发给服务端的,那么这些cookie会增加网络开销;如果是,就会大大免去重复添加操作;所以 对于每次请求都要携带的信息就适合放在cookie中

有限制: 4Kb 数量最多20个

cookie的格式

  • expries/max-age:

expries: http/1.0协议中的选项,必须是GMT格式(通过new Date().toGMTString()或new Date().toUTCString()),默认有效期是session,即会话cookie,浏览器关闭后销毁

Max-age: http/1.1协议中,以秒为时间单位,值为: 负数 0 整数, 负数代表有效期为session,0代表删除,正数代表有效期为创建时间+max-age

  • domain和path:

domain+path=url,限制cookie被哪些URL访问

  • secure

设置cookie只在确保安全的请求中才发送,如https协议或其他安全协议中,默认是cookie不会带secure选项

在客户端这只secure时,需是https协议

  • httponly:

设置是否能通过js访问,默认情况下,此项为空,js可以进行访问(读 删 修)

如果为true,这类cookie客户端无法设置,只能通过服务端设置

目的: 保障安全,避免遭受xss攻击

如何设置cookie

服务端: set-cookie

客户端: docunment.cookie 注意客户端设置secure有条件(只有在https协议的网页中才能成功) 且不能设置httponly

修改: 重新赋值

删除: 设置过去时间点

编码: cookie为字符串,其中的空格 分号 逗号会被当做特殊字符,需要进行编码.一般采用encodeURIComponent/decodeURIComponent或者encodeURI/decodeURI