跳到主要内容

PHP Cookies 设置和使用

Cookies(中文常称“浏览器小甜饼”🍪)是 Web 开发中常用的机制,用来在客户端(浏览器)保存少量数据,比如用户登录状态、偏好设置等。在 PHP 中,你可以很方便地创建、读取和删除 Cookies。接下来我们就详细讲解一下!

提示

Cookies 是存储在客户端的小数据文件,通常由服务器通过 HTTP 响应头设置,浏览器下次访问时会自动带上这些信息。

在 PHP 中使用 setcookie() 来发送 Cookie 到浏览器。注意:必须在输出任何内容之前调用,否则会报错!

基本语法:

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

最常用的参数:

  • name:Cookie 名称(字符串)
  • value:Cookie 值(字符串)
  • expire:过期时间(时间戳,单位为秒)
  • path:指定 Cookie 可用的路径(默认为 /
  • 其余参数可选,通常用于增强安全性

示例:设置一个简单的 Cookie

<?php
// 设置一个名为 user 的 cookie,有效期为 1 小时
setcookie("user", "Alice", time() + 3600);
?>

你可以通过 $_COOKIE 超全局数组来访问已设置的 Cookie。例如:

<?php
if (isset($_COOKIE["user"])) {
echo "欢迎回来," . $_COOKIE["user"];
} else {
echo "你好,新朋友!";
}
?>

修改 Cookie 的方式其实就是重新调用 setcookie() 一次,使用相同的名称。例如:

setcookie("user", "Bob", time() + 3600); // 将 user 改为 Bob

浏览器会用新值覆盖旧值。

删除 Cookie 的方法是将其过期时间设置为过去。例如:

setcookie("user", "", time() - 3600);

这会告诉浏览器立即删除名为 user 的 Cookie。

限制 Cookie 的作用路径:

setcookie("theme", "dark", time() + 3600, "/user");

这个 Cookie 只有在访问 /user 路径或子路径时才会生效。

限定子域名:

setcookie("test", "1", time() + 3600, "/", ".example.com");

这样 test Cookie 在 www.example.comblog.example.com 等子域都可用。

增强安全性

在 PHP 中,可以使用 httponlysecure 增强安全性。例如:

setcookie("token", "abc123", time() + 3600, "/", "", true, true);
  • 第 6 个参数 secure=true:只通过 HTTPS 发送;
  • 第 7 个参数 httponly=true:JavaScript 无法访问此 Cookie,防止 XSS 攻击。

完整示例

下面是一个演示 PHP 中设置、读取、删除 Cookie 的完整示例。

<?php
// 设置 cookie(必须在 HTML 输出之前)
setcookie("lang", "zh-CN", time() + 86400); // 保存一天

// 读取 cookie
if (isset($_COOKIE["lang"])) {
echo "你的语言偏好是:" . $_COOKIE["lang"];
} else {
echo "语言偏好未设置。";
}

// 删除 cookie
setcookie("lang", "", time() - 3600);
?>

在 Web 开发中,Session 是另一个常见的词,常和 Cookie 一起出现。下面是 Cookie 和 Session 的简单对比,你可以看到它们的核心区别。

特点CookieSession
存储位置客户端(浏览器)服务端
安全性相对较低更安全
存储容量小(一般 4KB)可以更大
生命周期可持久化通常随浏览器关闭失效
可见性用户可见并可修改用户不可见

小结

在 PHP 中操作 Cookie 十分简单,你只需要使用 setcookie() 设置,$_COOKIE 读取,通过修改过期时间即可删除。别忘了 setcookie() 要在输出内容之前调用!同时合理使用 httponlysecure 参数,有助于提高应用的安全性。