PHP Cookie 使用教程
本教程基于详细讲解 如何设置、读取、删除 Cookie,以及如何使用 isset()
检查 Cookie 是否存在。
1. 设置 Cookie
使用 setcookie()
函数可以创建一个 Cookie。例如,下面的代码 创建了一个名为 user
,值为 John Doe
的 Cookie,并设置其在 30 天后过期:
示例代码
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
// 86400 = 1 天,30 天后过期
?>
<html>
<body>
<?php
echo "Cookie is set.";
?>
</body>
</html>
说明
setcookie("user", "John Doe", time() + (86400 * 30), "/");
name
:"user"
是 Cookie 的名称。value
:"John Doe"
是 Cookie 的值。expire
:time() + 86400 * 30
设置 30 天后过期。path
:"/"
代表 Cookie 可用于整个网站。
2. 读取 Cookie
Cookie 不会立即生效,它只能在下次请求时才能获取。如果你想读取 Cookie 值,可以使用 $_COOKIE
变量。
示例代码
<html>
<body>
<?php
$cookie_name = "user";
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' does not exist!";
} else {
echo "Cookie is named: " . $cookie_name . "<br>Value is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
说明
isset($_COOKIE["user"])
检查 Cookie 是否存在。$_COOKIE["user"]
访问 Cookie 值。- 如果 Cookie 不存在,则输出
"Cookie named 'user' does not exist!"
。 - 如果 Cookie 存在,则输出
"Cookie is named: user Value is: John Doe"
。
3. 删除 Cookie
要删除 Cookie,需要 将其值设为空 并将过期时间设置为过去的时间,这样浏览器就会删除该 Cookie。
示例代码
<?php
$cookie_name = "user";
unset($_COOKIE[$cookie_name]); // 从 PHP 变量中移除(但不会删除浏览器的 Cookie)
// 让 Cookie 立即过期
setcookie($cookie_name, "", time() - 3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' is deleted.";
?>
</body>
</html>
说明
unset($_COOKIE["user"]);
只是从 PHP 变量中移除该 Cookie,并不会真正删除浏览器中的 Cookie。setcookie("user", "", time() - 3600);
使 Cookie 过期,浏览器将在下次请求时删除它。
4. 使用 isset()
检查 Cookie
可以使用 isset($_COOKIE["cookie_name"])
来检查 Cookie 是否存在,并在 Cookie 存在时获取其值。
示例代码
<?php
setcookie("ID", "123", time() + 3600); // 1 小时后过期
if(!isset($_COOKIE['ID'])) {
echo "Cookie ID not exist!";
die;
} else {
$login_id = $_COOKIE['ID'];
echo "Cookie ID is: " . $login_id;
}
// 先删除 PHP 变量
unset($_COOKIE['ID']);
// 让 Cookie 立即过期
setcookie('ID', '', time() - 3600);
echo "<br>Cookie 'ID' is deleted.";
?>
说明
isset($_COOKIE['ID'])
检查 Cookie 是否存在:- 如果不存在,则输出
"Cookie ID not exist!"
并终止执行。 - 如果存在,则读取其值
$_COOKIE['ID']
并输出"Cookie ID is: 123"
。
- 如果不存在,则输出
unset($_COOKIE['ID']);
只是从 PHP 变量中移除 Cookie,不会真正删除浏览器中的 Cookie。setcookie('ID', '', time() - 3600);
让 Cookie 过期,浏览器将在下一次请求时删除它。
总结
操作 | 代码 |
---|---|
设置 Cookie | setcookie("user", "John Doe", time() + 86400 * 30, "/"); |
读取 Cookie | $_COOKIE["user"] |
检查 Cookie 是否存在 | isset($_COOKIE["user"]) |
删除 Cookie(让其过期) | setcookie("user", "", time() - 3600); |
这是一个用于练习的完整的 PHP 项目:用户登录系统(使用 Cookie)
这个项目是一个简单的 用户登录系统,利用 Cookie 来存储用户登录状态,并实现 设置、读取、删除 Cookie 的功能。
📌 项目功能
login.php
:用户登录(设置 Cookie)。welcome.php
:读取 Cookie,欢迎已登录用户。logout.php
:用户退出(删除 Cookie)。index.php
:首页,显示用户是否已登录。
📁 项目结构
/php_cookie_login_system
│── index.php # 首页
│── login.php # 用户登录
│── welcome.php # 欢迎页
│── logout.php # 退出登录
📜 代码部分
1️⃣ index.php
(首页)
<?php
// 检查用户是否已登录
if (isset($_COOKIE["user"])) {
echo "Welcome back, " . $_COOKIE["user"] . "! <br>";
echo "<a href='logout.php'>Logout</a>";
} else {
echo "You are not logged in. <br>";
echo "<a href='login.php'>Login</a>";
}
?>
📌 功能:
- 检查
$_COOKIE["user"]
是否存在,判断用户是否已登录。 - 如果已登录,显示欢迎信息和 登出链接。
- 如果未登录,显示 登录链接。
2️⃣ login.php
(用户登录)
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
// 创建一个 1 天有效的 Cookie
setcookie("user", $username, time() + 86400, "/");
// 重定向到欢迎页面
header("Location: welcome.php");
exit();
}
?>
<html>
<body>
<h2>Login</h2>
<form method="post">
Username: <input type="text" name="username" required>
<input type="submit" value="Login">
</form>
</body>
</html>
📌 功能:
- 获取用户输入的用户名
$_POST["username"]
。 - 使用
setcookie("user", $username, time() + 86400, "/")
创建 有效期 1 天的 Cookie。 - 登录成功后,跳转到
welcome.php
。
3️⃣ welcome.php
(欢迎页面,读取 Cookie)
<?php
if (isset($_COOKIE["user"])) {
echo "Welcome, " . $_COOKIE["user"] . "! <br>";
echo "<a href='logout.php'>Logout</a>";
} else {
echo "You are not logged in. <br>";
echo "<a href='login.php'>Login</a>";
}
?>
📌 功能:
- 读取
$_COOKIE["user"]
并显示欢迎信息。 - 如果用户未登录,提示登录。
4️⃣ logout.php
(退出登录,删除 Cookie)
<?php
// 删除 Cookie
setcookie("user", "", time() - 3600, "/");
unset($_COOKIE["user"]);
echo "You have been logged out. <br>";
echo "<a href='login.php'>Login again</a>";
?>
📌 功能:
- 使用
setcookie("user", "", time() - 3600, "/")
让 Cookie 过期。 - 使用
unset($_COOKIE["user"]);
移除 PHP 变量。 - 显示登出消息,并提供 重新登录的链接。
🎯 如何运行这个项目
-
创建 PHP 服务器
- 运行 PHP 内置服务器(确保 PHP 已安装):
php -S localhost:8000
- 在浏览器访问
http://localhost:8000/index.php
- 运行 PHP 内置服务器(确保 PHP 已安装):
-
测试步骤
- 访问
index.php
(未登录状态)。 - 进入
login.php
,输入用户名并提交。 - 进入
welcome.php
,会看到欢迎信息。 - 点击
logout.php
退出登录,回到index.php
显示未登录。
- 访问
🎯 关键功能总结
✅ 创建 Cookie(setcookie("user", $username, time() + 86400, "/");
)
✅ 读取 Cookie($_COOKIE["user"]
)
✅ 删除 Cookie(setcookie("user", "", time() - 3600, "/");
)
✅ 检查 Cookie 是否存在(isset($_COOKIE["user"])
)