认识cookie

什么是cookie?

cookie的英文原意是小饼干
是为了应对HTTP是无状态协议这一特性而创造出来的方法,用于在客户端保留信息并在下次请求传回服务器
服务器响应(response)的http报文中可以添加set-cookie字段, 通过设置该字段中的属性可以控制客户端存储cookie信息
存有cookie信息的客户端会在后续请求(request)中加入cookie字段

cookie中的属性

除键值对外都不是必填项,各属性之间通过一个分号和一个空格隔开

"key=value; expires=Thu, 25 Feb 2016 04:18:00 GMT; domain=ppsc.sankuai.com; path=/; secure; HttpOnly"
  1. key=value
    cookie键值对(必需项)
  2. expires=DATE
    cookie的有效期(默认为浏览器关闭为止)
    必须是GMT格式的时间

expires 是 http/1.0协议中的选项,在新的http/1.1协议中expires已经由 max-age 选项代替,两者的作用都是限制cookie 的有效时间。expires的值是一个时间点(cookie失效时刻= expires),而max-age 的值是一个以秒为单位时间段(cookie失效时刻= 创建时刻+ max-age)。
另外,max-age 的默认值是 -1(即有效期为 session );若max-age有三种可能值:负数、0、正数。负数:有效期session;0:删除cookie;正数:有效期为创建时刻+ max-age

  1. path=路径
    用于限制cookie的发送范围的文件目录(若不指定则默认为文档所在的文件目录)
  2. domain=域名
    指定cookie适用对象的域名(若不指定则默认为创建cookie的服务器的域名)
    eg: Set-Cookie: name=value;secure
    上例仅在使用HTTPS的情况下才进行cookie的回收

特别说明1:发生跨域xhr请求时,即使请求URL的域名和路径都满足 cookie 的 domain 和 path,默认情况下cookie也不会自动被添加到请求头部中。若想知道原因请阅读本文最后一节)
特别说明2:domain是可以设置为页面本身的域名(本域),或页面本身域名的父域,但不能是公共后缀 public suffix。举例说明下:如果页面域名为 www.baidu.com, domain可以设置为“www.baidu.com”,也可以设置为“baidu.com”,但不能设置为“.com”或“com”。

  1. secure
    用于限制cookie在HTTPS安全链接下使用
  2. HttpOnly?
    作用是使JavaScript脚本无法获得cookie,防止XSS对cookie的信息窃取
    添加了HttpOnly这条属性后,js中的document.cookie无法取到cookie值

在服务端设置cookie

在response header的set-cookie字段设置, 每个字段对应一个cookie, 存储格式为字符串
在服务端可以设置cookie的全部6个属性

在客户端设置cookie

使用document.cookie

document.cookie = "name=Micheal; max-age=3600; "

客户端无法设置HttpOnly属性

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

存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这设置自动处理就大大免去了重复添加操作。所以对于那设置“每次请求都要携带的信息(最典型的就是身份认证信息)”就特别适合放在cookie中,其他类型的数据就不适合了。

注意:

1.每个域名下的cookie最大为4kb, 每个域名下最多有20条cookie(不同的浏览器厂商可能会有所区别)

你可能感兴趣的:(认识cookie)