简单说一下cookie

156 阅读2分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

cookie是什么

众所周知http请求是一种无状态的协议,也就是说,客户端向服务端发送的请求,第一次和第二次是没有联系的,而cookie的出现就是解决这样子的问题。客户端第一次向服务端发送请求后,客户端会通过Set-cookie来向客户端设置cookie。之后的请求就会发送cookie,服务端就根据cookie来识别用户。

cookie 的大小一般不超过4kb

cookie的属性

name

即是一个cookie名字的意思,在一个域名下,cookie的name是不能相同的,否则就会被后一个给覆盖。

value

表示cookie的值

domain

这个指的是域名,即cookie绑定的域名,如果没有设置,会自动绑定到执行语句的当前域,不能够跨域设置cookie,比如.abc.com的域名下设置了.def.com这样是无效的。不过当设置了.abc.com的cookie,在a.abc.comb.abc.com是可以使用的

path

path 是指定了一个路径,一般是匹配一个路由,只有匹配到该路径才可以发送cookie,比如指定Path=/abc,这样/blog是不会发送cookie首部的,而/abc/bog 则会发送http首部

secure

标记为secure=true时,cookie只会在https协议下进行传输,可以保障cookie在客户端与服务器间的传输过程中不会被篡改。

HTTPOnly

设置了HTTPOnly属性可以防止客户端通过document,cookie等方式反问cookie。

Expires/Max-Age

  • Expires属性可以设置一个时间来表示cookie的过期时间,不设置时的指为Session 将会在页面关闭时被清除。此外,expires属性是根据客户端的时间的,因此不同的客户端具有差异性,所以现在一般使用Max-Age属性比较多
  • Max-Age可以是一个正数,0,或者是一个负数。当max-age为正数时,表示cookie会在这个值的秒数后被删除。当max-age设置为0时,表示cookie过期,此时删除cookie。如果max-age是一个负数,则代表该cookie时临时存储,不会生成cookie文件。

SameSite

SameSite的作用时可以让cookie在跨站请求时不会被发送。

它有三个值:

  1. strict:仅允许相相同站点发送请求的Cookie,即当前网页的URL与发送Cokie的目标URL必须完全一致
  2. Lax:允许部分第三方请求携带cookie
  3. none:无论是否跨站都会发送cookie

注意:

http接口不支持SameSite = none,必须在该cookie加上Secure属性,只有在HTTPS协议下该Cookie才会被发送。