phpinfo输出会含Cookie吗_检查phpinfo与Cookie关联法【查验】

11次阅读

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

phpinfo输出会含Cookie吗_检查phpinfo与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_tokentheme 两项
  • 若未出现,检查 Web 服务器配置:Nginx 需确保有 fastcgi_param HTTP_COOKIE $http_cookie;apache 若用 mod_php 通常无此问题,但用 php-fpm 时仍需确认环境变量传递
  • 注意:chrome DevTools 的 application → Cookies 查看的是「浏览器存了什么」,而 phpinfo() 显示的是「服务器收到了什么」——二者不等价

真正容易被忽略的是 FastCGI 环境变量透传这个环节,很多调试者盯着 PHP 配置查半天,却没意识到 Web 服务器根本没把 Cookie 头转给 PHP 进程。

text=ZqhQzanResources