cookie

1、介绍

http本身是无状态的,但实际业务中往往需要http请求表明请求者的身份和状态等信息,cookie是该问题的一种解决方案。(另外的包括session、token、浏览器localstorage)

  • cookie本质是一个对象,具有name、value等属性。
  • 一般由服务端创建,然后基于响应头部的set-cookie字段发送给浏览器。
  • 浏览器接收cookie后,保存
  • 当浏览器再次待发送目标域的请求时,会基于请求头部的cookie字段携带保存的cookie
  • 服务端接收请求,读取头部字段的cookie,以获取状态信息

2、cookie属性

默认值,是如果一个cookie只设置部分属性,那么浏览器会自动将其余属性设置为默认值。

(1)name

cookie的名称

(2)value

cookie的值

(3)domain

作用的域名范围,在对应域名及子域名的请求时,携带cookie

(4)path

作用的路径范围,在对应路径及子路径的请求时,携带cookie

(5)expires

  • 如果未设置,则该cookie属于会话cookie,在浏览器关闭时销毁
  • 如果设置了一个还未到达的时间点,则该cookie为存储cookie,直到到达限制时间销毁。关闭浏览器再开启,无影响
  • 如果设置了一个过期的时间,相当于告诉浏览器直接删除该cookie

(6)HttpOnly

具有该标志的cookie只能由请求携带,而不能被js读取

(7)Secure

具有该标志的cookie只能由https请求携带,而http无法携带

(8)samesite

  • strict:严格,完全禁止跨域携带cookie
  • Lax: 大多数情况下禁止跨域携带cookie,除非导航到目标网址的GET请求(链接、预加载、GET表单)

SameSite属性的默认SameSite=Lax 【该操作适用于2019年2月4号谷歌发布Chrome 80稳定版之后的版本】

请求类型    示例    正常情况    Lax
链接    <a href="..."></a>    发送 Cookie    发送 Cookie
预加载    <link rel="prerender" href="..."/>    发送 Cookie    发送 Cookie
GET 表单    <form method="GET" action="...">    发送 Cookie    发送 Cookie
POST 表单    <form method="POST" action="...">    发送 Cookie    不发送
iframe    <iframe src="..."></iframe>    发送 Cookie    不发送
AJAX    $.get("...")    发送 Cookie    不发送
Image    <img src="...">    发送 Cookie    不发送
  • None: 没有限制

必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。 【该操作适用于2019年2月4号谷歌发布Chrome 80稳定版之后的版本】

3、Set-Cookie字段

向浏览器设置服务端创建的cookie,一个cookie对应一个Set-Cookie字段,一个响应中可以同时有多个Set-Cookie字段。

set-cookie: test_cookie=CheckForPermission; expires=Thu, 20-Oct-2022 06:51:46 GMT; path=/; domain=.doubleclick.net; Secure; HttpOnly; SameSite=none
set-cookie: test_cookie=CheckForPermission; expires=Thu, 20-Oct-2022 06:51:46 GMT; path=/; domain=.doubleclick.net; Secure; SameSite=none

4、浏览器存储

所有浏览器都支持查看保存的cookie,F12》应用程序》选择cookie,并且可以直接进行操作。

5、Cookie字段

向服务端表示符合的cookie。

只有满足各属性完全符合才会携带,在请求中只有一个Cookie字段,多个cookie之间用;分割,cookie只携带name和value属性,用=连接。

Cookie: wordpress=rofdd; wp-settings-time-1=16662dd; wp-settings-1=abc

6、浏览器与cookie安全策略

7、cookie长度限制

COOKIE长度限制总结 - 简书 (jianshu.com)

  • http报文最大长度限制
  • 浏览器能够同时存储的cookie条数限制
  • 单个cookie所能够包含的字节限制

8、其它

  • html设置cookie
  • js读取和设置cookie
  • java读取和设置cookie
  • php读取和设置cookie
posted @ 2023-06-16 18:19  挖洞404  阅读(5)  评论(0编辑  收藏  举报