diveDylan / blog

My blog, detail is in the issues list
2 stars 0 forks source link

Cookie #39

Open diveDylan opened 4 years ago

diveDylan commented 4 years ago

Cookie是一个请求头部,一般是服务器在返回Headersset-cookie后,客户端的后续的请求都会默认带上cookie 这个请求头。

response.setCookie(key, value)

request.header.cookie = value

作用

1、保持会话状态, 因为http请求是无状态的,cookie的出现使我们可以保持用户的登录状态、购物车状态等其他信息我们应用应该保存的状态
2、个性化服务,`cookie`常用于代表千人千面的登录标识,而我们可以通过这个千人千面的特性提供个性化服务
3、追踪和分析用户行为,根据`cookie`的标识追踪分析不同用户行为

cookie 一些属性

一个cookie通常含有一下属性domain<string>expirationDate< number >(optional)、firstPartyDomain<string>hostOnly<boolean>httpOnly< boolean>name<stringpath <string>secure<boolean>session<boolean>sameSite<enumString>storeId<string>value<string>

持久型、会话型

目前普遍有形式,一种是会话期Cookie另一种是持久性cookie 会话期cookie在仅存在浏览器会话期间,关闭浏览器会自动删除。 持久性cookie需要指定一个失效时间,即我们常说的ExpiresMax-Age

// api 
// newCookie是一个键值对形式的字符串。需要注意的是,用这个方法一次只能对一个cookie进行设置或更新。
document.cookie = encodeURIComponent(<key>)=encodeURIComponent(<value>);
max-age=<max-age-in-seconds>;
expires=<date-in-GMTString-format>; // js date.toUTCString()
path=<path>;
domain=<domain>;
secure=<Boolean>

安全性

安全型有两个策略属性SecurehttpOnly

标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过Cookie传输,因为Cookie有其固有的不安全性,Secure 标记也无法提供确实的安全保障。从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用Cookie的 Secure 标记

而标记httpOnly之后客户端没有办法通过js脚步访问cookie,比如像document.cookie等api,这是有效避免XSS脚本攻击的做法之一

// server action 
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Domain

Domain属性将标记cookie的所属域,不属于该域名的属性将无法访问cookie值得注意的是子域名可以访问该cookie, 域名的阅读是从右到左

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

<Domain>developer.mozilla.org
org---TLD顶级域名,地区顶级域名us,sh,政府机关顶级域名gov,机构组织顶级域名org,edu
[mozilla, developer] ---label标签
          ----mozilla--->SLD二级域名,紧跟TLD的为二级域名
         ----developer --->三级域名

Domain=mozilla.org
includes subDomain<developer.mozilla.org>

sameSite

SameSite属性作为cookie的属性之一,允许您声明是否应将Cookie限制为第一方或同一站点上下文


`Lax`: <default>
Cookies允许与顶级一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值
exmaple link:
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies#First-party_isolation

----in a.com, img src b.com(get request set b.com<domain> cookie) send b.comcookie is allowed

Strict Cookie只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送

None Cookie将在所有上下文中发送,即允许跨域发送


更多sameSite资料查阅: [SameSite](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie/SameSite)

相关资料
 [http-cookie](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies)
 [domain-name](https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_domain_name)
[cookie](https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/API/cookies/Cookie)