深入了解 Cookie 是什么,Cookie 的特性有哪些,用来做什么,怎么设置 cookie?

Cookie 是浏览器用来保存数据的一小块区域,以 key-value 的格式保存纯文本数据,常用来保存用户的登录状态,也就是配合 Session 用,可参考文章:Token、Session、Cookie是什么
下面是浏览器中保存的 Cookie 数据:
浏览器的 cookie

Cookie 有大小限制,不同浏览器的大小限制有差别,大概是 4k 样子,每个域名能有50个cookie左右,所以尽量只保存一些小的数据,超过后浏览器会删除一些 cookie。
Cookie 会在每次发起请求时自动的插入到请求头中,所以把 Session id,token 这类用户登录数据保存到这里非常合适。
Cookie 有以下几个属性可以设置:
Domain绑定的域名,Cookie 跟域名绑定,不能跨域访问
Expire有效期,超过有效期后自动删除,有效期还可以通过 max-age 来设置多少秒后失效。
HttpOnly可以设置只允许网页读写,禁止 js 读写。
Secure设置只在 https 协议下传输 cookie
Path只在这个路径下传递 cookie,默认是根路径 /。适当的填写path,可以减少不必要的cookie传递

如何设置

如果是服务端,我们可以在响应头中添加 set-cookie 浏览器看到这个头后会自动把 cookie 保存起来。
如下图就是服务端设置的:
服务端设置cookie

客户端我们可以通过 js 设置:
document.cookie = "token=xxxx;max-age=86400;"
document.cookie = "otherkey=othervalue;max-age=86400;"
要设置多个时就调用多次。

安全性

因为 cookie 会在每个请求中都自动带上,就导致了安全问题,一些不怀好意的 js 就可能通过这个方式偷走了你的 cookie,而 cookie 包含了我们登录后的一些 session id 或者 token,这样就容易被别人登录我们账号,我们可以开启 HttpOnly 来限制 js 无法读写 cookie。
还可以设置 Secure,限制只在 https 协议下传输,这样可以避免在传输过程中被第三方拦截偷走你的 cookie