phpinfo() 在 $_COOKIE 小节显示当前请求中通过 HTTP Cookie 头传入且被 PHP 解析的键值对,若未携带 Cookie 则显示 array(0) { },其可见性取决于 variables_order 是否含 C 及 Web 服务器是否透传 HTTP_COOKIE 环境变量。

phpinfo() 默认不输出 Cookie 内容,但会显示 $_COOKIE 超全局变量的结构(空数组或键名),前提是请求中实际携带了 Cookie 且未被禁用。
phpinfo() 中哪里能看到 Cookie 相关信息
打开 phpinfo() 页面后,直接搜索关键词 Cookies 或滚动到 $_COOKIE 小节。该小节只显示当前请求中通过 HTTP Header Cookie: 传入、且被 PHP 成功解析的键值对 —— 不是原始 Cookie 字符串,也不是浏览器本地存储的所有 Cookie。
- 若请求未带
Cookie头(如新标签页直接访问),$_COOKIE小节仍存在,但内容为array(0) { } - 若
php.ini中设置了variables_order = "GPCS"(缺省值),则C表示启用 Cookie 变量自动填充;若去掉C,$_COOKIE将始终为空,phpinfo()里也看不到该小节 - 敏感字段(如
sessionid)不会被过滤,只要它出现在原始 Cookie 中且未被filter_var类逻辑拦截,就会原样列出
为什么有时 phpinfo() 显示了 $_COOKIE 却读不到值
常见于开发环境误配或协议干扰,本质是 Cookie 未送达 PHP 解析层:
- 请求使用了
http://,但 Cookie 设置了Secure属性 → 浏览器拒绝发送 - 域名不匹配:服务端域名是
example.com,但 Cookie 的Domain设为.test.com→ 浏览器跳过发送 - PHP 运行在 CGI/FastCGI 模式下,而 Web 服务器(如 Nginx)未将
HTTP_COOKIE环境变量透传给 PHP →$_COOKIE始终为空,phpinfo()也不显示该小节 - 脚本开头调用了
ini_set('register_globals', 'Off')(虽已废弃)或修改了variables_order,导致C被移除
如何验证 Cookie 是否真实进入 phpinfo()
不要依赖浏览器地址栏直输 URL,必须构造带 Cookie 的请求:
立即学习“PHP免费学习笔记(深入)”;
curl -H "Cookie: user_token=abc123; theme=dark" http://localhost/info.php
其中 info.php 内容仅为:
- 对比响应 HTML 中
$_COOKIE小节是否出现user_token和theme两项 - 若未出现,检查 Web 服务器配置:Nginx 需确保有
fastcgi_param HTTP_COOKIE $http_cookie;;Apache 若用mod_php通常无此问题,但用php-fpm时仍需确认环境变量传递 - 注意:Chrome DevTools 的 Application → Cookies 查看的是「浏览器存了什么」,而
phpinfo()显示的是「服务器收到了什么」——二者不等价
真正容易被忽略的是 FastCGI 环境变量透传这个环节,很多调试者盯着 PHP 配置查半天,却没意识到 Web 服务器根本没把 Cookie 头转给 PHP 进程。











