0Pricing
PHP Academy · 课时

Cookie 安全:HttpOnly 与 Secure 标志

使用 HttpOnly、Secure 和 SameSite 属性保护 Cookie。

Cookie 安全:HttpOnly 与 Secure 标志 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。

HttpOnly 标志

当 Cookie 具有 HttpOnly 标志时,JavaScript 无法通过 document.cookie 访问它,从而防止基于 XSS 的会话窃取。

设置 HttpOnly 和 Secure

请使用选项数组形式(PHP 7.3+),以获得简洁易读的代码。

<?php
setcookie("session_id", $id, [
    "expires"  => time() + 3600,
    "path"     => "/",
    "secure"   => true,
    "httponly" => true,
    "samesite" => "Strict",
]);

Secure 标志

Secure Cookie 只会通过 HTTPS 发送。在 HTTP 连接中,浏览器会忽略它,从而防止其通过未加密的 HTTP 被拦截。

SameSite 属性

SameSite 控制 Cookie 何时随跨站请求发送:

  • Strict —— 仅限同站请求
  • Lax —— 同站请求以及顶级导航
  • None —— 跨站请求(需要 Secure)

SameSite 与 CSRF

将 SameSite 设置为 Strict 或 Lax 可以降低 CSRF 风险,因为会话 Cookie 不会随伪造的跨站 POST 请求发送。

php.ini 会话 Cookie 设置

在运行时配置默认的会话 Cookie 安全设置:

<?php
ini_set("session.cookie_httponly", "1");
ini_set("session.cookie_secure",   "1");
ini_set("session.cookie_samesite", "Lax");
session_start();

Cookie 前缀

浏览器会遵循 Cookie 名称前缀的规则:

  • __Secure- —— Cookie 必须设置 Secure 标志
  • __Host- —— 必须设置 Secure、Path=/,且不能设置 Domain 属性

Cookie 前缀示例

使用 __Host- 前缀,将 Cookie 绑定到确切的主机。

<?php
setcookie("__Host-session", $token, [
    "secure"   => true,
    "httponly" => true,
    "samesite" => "Strict",
    "path"     => "/",
]);

在 DevTools 中检查标志

在浏览器 DevTools → Application → Cookies 中确认:HttpOnly 已勾选,Secure 已勾选,SameSite 显示为 Strict 或 Lax。

没有 HttpOnly

通过 XSS 注入的恶意脚本可以运行 document.cookie,读取会话 ID 并将其发送给攻击者,从而接管账户。

没有 Secure

在 HTTP/HTTPS 混合的网站上,会话 Cookie 会以明文通过 HTTP 发送。网络窃听者可以窃取它。

总结

始终为会话 Cookie 和身份验证 Cookie 设置 HttpOnly 和 Secure。添加 SameSite=Strict 或 Lax。使用 setcookie() 的选项数组形式。

快速检查

哪个标志可以阻止 JavaScript 读取 Cookie?

常见问题解答

「Cookie 安全:HttpOnly 与 Secure 标志」课时是免费的吗?

是的 — 「Cookie 安全:HttpOnly 与 Secure 标志」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。

「Cookie 安全:HttpOnly 与 Secure 标志」这节课中我会学到什么?

使用 HttpOnly、Secure 和 SameSite 属性保护 Cookie。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Cookie 安全:HttpOnly 与 Secure 标志」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 启动和使用会话
  2. 会话安全最佳实践
  3. 设置和读取 Cookie
  4. Cookie 安全:HttpOnly 与 Secure 标志
← 返回 PHP Academy