专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

HTTP Cookie

Cookie 是服务端委托浏览器存储在客户端的一些记录用户信息的数据,一般总大小不能超过 4K。

一、工作流程

1、当浏览器首次访问服务器时,服务器会创建一个独特的身份标识数据,格式是 key=value 放进 Set-cookie 字段里随响应报文返回给浏览器。

2、浏览器收到响应报文后会把 Cookie值 存储起来,下次再请求时会自动放进 Cookie 字段里发送给服务器。

3、当服务器接受到带有 Cookie 字段 的请求,就通过 Cookie 里的值识别出用户的身份,提供个性化的服务。

二、Cookie 主要用于以下三个方面

  • 身份识别,实现有状态的会话事务(登录状态、购物车等)
  • 个性化设置(用户自定义设置、主题等)
  • 广告跟踪

缺点

  • 由于会附加每个 HTTP 请求中, 会增加流量
  • HTTP 请求中 Cookie 是明文传递, 除非是 HTTPS, 否则有安全问题
  • Cookie 大小限制 4kb 左右, 对应复杂的存储需求远远不够

三、Cookie 分类:按存储位置不同可分为 会话期 Cookie持久性 Cookie

  • 会话期 Cookie:存储在内存,仅在浏览器运行期间有效,浏览器关闭后会自动删除。过期时间显示为 SessionN/A
  • 持久性 Cookie:存储在本地,可以指定过期时间 Expires 或有效期 Max-Age

四、Cookie 的属性

  • 有效期

Expires:过期时间,绝对时间点。

Max-Age:收到报文后多久的过期时间,单位是秒。设置为 0 时 立刻失效。

两者可以同时使用,但会优先 Max-Age 计算失效期。

  • 作用域:让浏览器仅发送给特定的服务器和 url,避免被其它网站盗用。

Dnmain 和 Path 指定 Cookie 所属的域名和路径。

浏览器发送 Cookie 前会从 url 中提取出 host 和 path 部分来对比 Cookie 的属性,如果满足了条件,才会在请求头里发送 Cookie。

  • 安全性

HttpOnly:Cookie 只能通过浏览器 HTTP 协议传输。也就杜绝了 document.cookie 获取 Cookie 的可能。

Secure:Cookie 仅能用 HTTPS 协议加密传输。

SameSite:可以防范 CSRF(跨站请求伪造)攻击。

SameSite=Strict:严格限定 Cookie 不能随跳转链接跨站发送。 SameSite=Lax: 禁止 POST 跨站发送,但允许 GET/HEAD 等安全方法。

五、怎样使用?利用 PHP 函数 setcookie 测试使用

参数 介绍
name Cookie 名称
value Cookie 值,存储在本地
expire 过期时间,使用 Unix 时间戳(PHP 内部作了转换)
path 服务器路径,默认值设置 Cookie 的当前目录
domain 域名或子域名
secure 设置 Cookie 是否仅通过 HTTPS 连接传给客户端
httponly Cookie 是否仅通过 HTTP 协议访问。如设为 True, JavaScript 这些脚本无法访问,即有效减少 XSS 攻击
// PHP setcookie 设置 Cookie

// 开发者工具:Application->Storage->Cookie
// 能看到有条 name 为 Gnahz、value 为 Test-Cookie 和 1 小时后过期的 Cookie。
setcookie("Gnahz", "Test-Cookie", time()+3600);  

// JavaScript XSS 攻击获取 Cookie

// 输出:Gnahz=Test-Cookie
document.cookie; 

// 设置 httponly,让 Cookie 仅通过 HTTP 协议访问
// 输出:""
setcookie("Gnahz", "Test-Cookie", time()+3600, '', '', false, true); 

文章永久链接:https://tech.souyunku.com/24718

未经允许不得转载:搜云库技术团队 » HTTP Cookie

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们