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 反馈 — 无需本地设置。
此课程中的所有课时
- 启动和使用会话
- 会话安全最佳实践
- 设置和读取 Cookie
- Cookie 安全:HttpOnly 与 Secure 标志