PHP Cookies
在本教程中,你将学习如何使用 PHP cookie 在用户的浏览器中存储少量信息。
什么是 Cookie
Cookie 是一个小文本文件,允许你在用户的计算机上存储少量数据(近 4KB)。它们通常用于跟踪信息,例如网站可以检索的用户名,以便在用户下次访问网站时对页面进行个性化。
提示: 每次浏览器向服务器请求页面时,cookie 中的所有数据都会自动发送到请求中的服务器。
在 PHP 中设置 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 中,因为它可能会被恶意用户操纵。要安全地存储敏感数据,请使用会话。
访问 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
关联数组的结构。
删除 Cookie
你可以通过 setcookie()
使用 cookie 名称和任何值(例如空字符串) 调用相同的函数来删除 cookie,但是这次你需要设置过去的过期日期,如下例所示:
<?php
// Deleting a cookie
setcookie("username", "", time()-3600);
?>
提示: 你应该传递完全相同的路径,域和你在第一次创建 cookie 时使用的其他参数,以确保删除正确的 cookie。