2024 年 PHP 大会日本站

$_COOKIE

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_COOKIEHTTP Cookies

描述

通过 HTTP Cookie 传递给当前脚本的变量的关联数组

示例

示例 #1 $_COOKIE 示例

<?php
echo 'Hello ' . htmlspecialchars($_COOKIE["name"]) . '!';
?>

假设“name”cookie 之前已设置

以上示例将输出类似于以下内容:

Hello Hannes!

备注

注意:

这是一个“超全局”或自动全局变量。这意味着它在整个脚本的所有范围内都可用。无需使用 global $variable; 就能在函数或方法中访问它。

添加备注

用户贡献的备注 4 条备注

kiril (at) atern (dot) us
8 年前
为了阐明前面发布的备注

Cookie 名称中的点 (.) 和空格 ( ) 将被替换为下划线 (_)。
k dot andris at gmail dot com
9 年前
注意,Cookie 名称中的点 (.) 将被替换为下划线 (_) 。
rc at opelgt dot org
1 年前
通常情况下,$_COOKIE 的值与 $_SERVER["HTTP_COOKIE"] 中的值并不相同!

在 phpinfo() 中,$_SERVER["HTTP_COOKIE"] 以 7 位显示浏览器存储在 Cookie 中的实际值。
在 $_COOKIE 中,此值经过 7 位到 8 位的转换。

当 $_SERVER["HTTP_COOKIE"] 中的所有字符都为 ASCII(7 位)时,将在 phpinfo() 中显示 $_COOKIE。如果单个字符不是 ASCII,则 phpinfo() 不显示任何值!

尽管 $_COOKIE 中仍然是 $_SERVER["HTTP_COOKIE"] 的 8 位转换!
原因:仅 8 位转换不足以说明字符的含义。
为此需要使用的字符集。

phpinfo() 不知道字符集,最好什么也不说。

在 PHP 生成的网页中使用 $_COOKIE 时,环境具有所用字符集的信息,因此可以显示所需的字符。

三个说明性示例
===========================
使用 HTML 表单获取要存储在名为“test”的 Cookie 中的内容。

字段“test”中的输入字符串:door
$_SERVER["HTTP_COOKIE"]:test=door
$_COOKIE["test"]
在 phpinfo() 中显示:door
在任何 html 页面中显示:door

字段“test”中的输入字符串(表单中使用 ISO-8859-1):Tür
$_SERVER["HTTP_COOKIE"]:test=T%FCr
$_COOKIE["test"]
在 phpinfo() 中显示:""
在 ISO-8859-1 html 页面中显示:Tür
(在 UTF-8 html 页面中显示:T�r)

字段“test”中的输入字符串(表单中使用 UTF-8):Tür
$_SERVER["HTTP_COOKIE"]:test=T%C3%BCr
$_COOKIE["test"]
在 phpinfo() 中显示:""
在 UTF-8 html 页面中显示:Tür
(在 ISO-8859-1 html 页面中显示:Tür)
user at NOSPAM dot example dot com
1 年前
PHP 将点 (.) 替换为下划线 (_) 。要查找所有原始 Cookie 名称(和值),可以使用 $_SERVER['HTTP_COOKIE']。

例如,要检索使用 <?php setcookie('testing.dots', 'value'); ?> 设置的 Cookie,可以使用
<?php
$cookies
= explode('; ', $_SERVER['HTTP_COOKIE']);
$allCookies = [];

foreach(
$cookies as $cookie) {
$keyAndValue = explode('=', $cookie);
$allCookies[$keyAndValue[0]] = $keyAndValue[1];
}

var_dump($allCookies);
/*
array(1) {
["testing.dots"]=>
string(5) "value"
}
*/

echo $allCookies['testing.dots'];
?>
To Top