Cookie

191 阅读3分钟

Cookie的属性

Name

一个域名下绑定的cookie,name不能相同,相同的name的值会被覆盖掉

Value

cookie的值必须被URL编码(encodeURI API, decodeURI API)

Domain

Domain 标识指定了哪些主机可以接受Cookie。如果不指定,默认为当前文档的主机(不包含子域名)。如果指定了Domain,则一般包含子域名。

例如,如果设置 Domain=mozilla.org,则Cookie也包含在子域名中(如developer.mozilla.org)。

关于域名可以查看这篇文章工程师最容易搞错的域名知识

Path

Path 标识指定了主机下的哪些路径可以接受Cookie(该URL路径必须存在于请求URL中)。以字符 %x2F ("/") 作为路径分隔符,子路径也会被匹配。

例如,设置 Path=/docs,则以下地址都会匹配:

/docs
/docs/Web/
/docs/Web/HTTP

Expires/Max-Age

Expires过期时间,逐渐被Max-Age所取代

Max-Age,是以秒为单位的,Max-Age为正数时,cookie会在Max-Age秒之后,被删除,当Max-Age为负数时,表示的是临时储存,不会生出cookie文件,只会存在浏览器内存中,且只会在打开的浏览器窗口或者子窗口有效,一旦浏览器关闭,cookie就会消失,当Max-Age为0时,又会发生什么呢,删除cookie,因为cookie机制本身没有设置删除cookie,失效的cookie会被浏览器自动从内存中删除,所以,它实现的就是让cookie失效。

Size

cookie的大小

HttpOnly

通过JavaScript的 Document.cookie API无法访问带有 HttpOnly 标记的Cookie

Secure

标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端

SameSite

SameSite Cookie允许服务器要求某个cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击

SameSite可以有下面三种值:

None

浏览器会在同站请求、跨站请求下继续发送cookies,不区分大小写。 在没有这个属性前浏览器默认的,所以会有CSRF的风险

Lax

在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者frames的调用,但只有当用户从外部站点导航到URL时才会发送。如link链接。

Strict

浏览器将只在访问相同站点时发送cookie。

Cookie 的 SameSite属性

Cookie与跨域

  1. 使用document.cookie能拿到的是当前域名下的cookie
  2. 通过配置ajax请求头'withCredentials'为true,以及后台配置('Access-Control-Allow-Origin','与请求网页一致的域名')和('Access-Control-Allow-Credentials',true),注意:Access-Control-Allow-Origin不能配置为‘*’,这样的方式可以使得跨域请求携带cookie
  3. 同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

服务端设置Cookie

Set-Cookie: <cookie名>=<cookie值>

资料

把cookie聊清