ZetCode

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。

basic_cookie.php
<?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。

expiring_cookie.php
<?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 访问。

secure_cookie.php
<?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 范围。

scoped_cookie.php
<?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。

delete_cookie.php
<?php

declare(strict_types=1);

// Set expiration to past time
setcookie("username", "", time() - 3600);

echo "Cookie 'username' has been deleted";

要删除 Cookie,请将其过期时间设置为过去的某个时间戳。然后浏览器会将其删除。必须使用与原始 Cookie 相同的路径/域名。

最佳实践

来源

PHP setcookie 文档

本教程通过各种场景下的实际示例,涵盖了 PHP setcookie 函数的 Cookie 处理。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 网络函数