PHP Cookies

在本教程中,你将学习如何使用 PHP cookie 在用户的浏览器中存储少量信息。

Cookie 是一个小文本文件,允许你在用户的计算机上存储少量数据(近 4KB)。它们通常用于跟踪信息,例如网站可以检索的用户名,以便在用户下次访问网站时对页面进行个性化。

提示: 每次浏览器向服务器请求页面时,cookie 中的所有数据都会自动发送到请求中的服务器。

setcookie() 函数用于在 PHP 中设置 cookie。确保 setcookie() 在脚本生成任何输出之前调用该函数,否则不会设置 cookie。该函数的基本语法如下:

setcookie(name, value, expire, path, domain, secure); 

setcookie() 函数的参数具有以下含义:

参数 描述
name cookie 的名称。
value cookie 的价值。不存储敏感信息,因为此值存储在用户的计算机上。
expires UNIX 时间戳格式的到期日期。在此之后,cookie 将无法访问。默认值为 0。
path 指定 cookie 可用的服务器上的路径。如果设置为 / ,则 cookie 将在整个域中可用。
domain 指定 cookie 可用于的域,例如 www.example.com。
secure 此字段(如果存在)表示仅在存在安全 HTTPS 连接时才应发送 cookie。

提示: 如果 cookie 的过期时间设置为 0 或省略,则 cookie 将在会话结束时过期,即浏览器关闭时。

这是一个使用 setcookie() 函数创建一个名为 username 的 cookie,并为其赋值为 John Carter 的示例。它还指定 cookie 将在 30 天后过期(30 days * 24 hours * 60 min * 60 sec)。

<?php
// Setting a cookie
setcookie("username", "John Carter", time()+30*24*60*60);
?>

注意: 除名称外的所有参数都是可选的。你也可以使用空字符串("")替换参数以跳过该参数,但是要跳过 expire 参数需要使用零(0),因为它是一个整数。

警告: 不要将敏感数据存储在 cookie 中,因为它可能会被恶意用户操纵。要安全地存储敏感数据,请使用会话

PHP $_COOKIE 超全局变量用于检索 cookie 值。它通常是一个关联数组,其中包含浏览器在当前请求中发送的所有 cookie 值的列表,由 cookie 名称键入。可以使用标准数组表示法访问单个 cookie 值,例如,为了显示上一个示例中设置的用户名 cookie,你可以使用以下代码。

<?php
// Accessing an individual cookie value
echo $_COOKIE["username"];
?>

上例中的 PHP 代码生成以下输出。

John Carter

在访问 cookie 之前检查 cookie 是否设置是一个好习惯。为此,你可以使用 PHP isset() 函数,如下所示:

<?php
// Verifying whether a cookie is set or not
if(isset($_COOKIE["username"])){
    echo "Hi " . $_COOKIE["username"];
} else{
    echo "Welcome Guest!";
}
?>

你可以像使用其他数组一样使用 print_r() 函数,如 print_r($_COOKIE); 来查看此 $_COOKIE 关联数组的结构。

你可以通过 setcookie() 使用 cookie 名称和任何值(例如空字符串) 调用相同的函数来删除 cookie,但是这次你需要设置过去的过期日期,如下例所示:

<?php
// Deleting a cookie
setcookie("username", "", time()-3600);
?>

提示: 你应该传递完全相同的路径,域和你在第一次创建 cookie 时使用的其他参数,以确保删除正确的 cookie。