PHP setcookie 函数
最后修改于 2025 年 4 月 4 日
PHP setcookie 函数创建 Cookie,用于在客户端浏览器上存储少量数据。Cookie 对于会话、用户偏好和跟踪至关重要。
基本定义
setcookie 定义一个将随 HTTP 标头一起发送的 Cookie。Cookie 存储在客户端,并在后续请求中发送回来。
语法:setcookie(string $name, string $value = "", int $expires = 0, string $path = "", string $domain = "", bool $secure = false, bool $httponly = false): bool。成功时返回 true,否则返回 false。必须在输出之前调用。
基本 Cookie 示例
此示例演示了仅使用名称和值设置简单 Cookie。
<?php
declare(strict_types=1);
setcookie("username", "john_doe");
echo "Cookie 'username' has been set with value 'john_doe'";
这会创建一个名为“username”且值为“john_doe”的 Cookie。该 Cookie 将在浏览器关闭时过期。简单 Cookie 用于临时存储。
带过期时间的 Cookie
这展示了如何设置一个在特定时间内有效的 Cookie。
<?php
declare(strict_types=1);
$expire = time() + (86400 * 30); // 30 days
setcookie("user_preference", "dark_mode", $expire);
echo "Cookie will expire in 30 days";
过期时间使用 Unix 时间戳设置。在这里,我们将当前时间加上 30 天的秒数。持久性 Cookie 可以重启浏览器后继续存在。
安全和 HttpOnly Cookie
此示例创建一个安全 Cookie,只能通过 HTTP 访问。
<?php
declare(strict_types=1);
setcookie(
"session_id",
"abc123xyz",
time() + 3600,
"/",
"",
true, // Secure - only over HTTPS
true // HttpOnly - no JavaScript access
);
echo "Secure session cookie set";
Secure 标志确保 Cookie 仅通过 HTTPS 传输。HttpOnly 可防止 JavaScript 访问,提高了对 XSS 攻击的安全性。
带路径和域名的 Cookie
此演示了使用路径和域名参数设置 Cookie 范围。
<?php
declare(strict_types=1);
setcookie(
"language",
"en_US",
time() + (86400 * 365),
"/blog/", // Only accessible under /blog/
".example.com" // Accessible on all subdomains
);
echo "Language cookie set for blog subdirectory";
Path 将 Cookie 限制在特定目录。Domain 允许 Cookie 在子域之间访问。对于具有多个部分的大型应用程序很有用。
删除 Cookie
此示例展示了如何通过设置过去的过期时间来正确删除 Cookie。
<?php
declare(strict_types=1);
// Set expiration to past time
setcookie("username", "", time() - 3600);
echo "Cookie 'username' has been deleted";
要删除 Cookie,请将其过期时间设置为过去的某个时间戳。然后浏览器会将其删除。必须使用与原始 Cookie 相同的路径/域名。
最佳实践
- 安全性:敏感 Cookie 务必使用 Secure 和 HttpOnly。
- 大小限制:Cookie 保持在 4KB 以下(浏览器限制)。
- 敏感数据:避免存储敏感信息。
- 验证:使用前务必验证 Cookie 数据。
- 替代方案:考虑使用会话进行服务器端存储。
来源
本教程通过各种场景下的实际示例,涵盖了 PHP setcookie 函数的 Cookie 处理。
作者
列出 所有 PHP 网络函数。