Session 与 Cookie
session_start/存储/销毁、setcookie、$_COOKIE、登录状态管理
Session 与 Cookie
HTTP 是无状态的——每次请求都是独立的。Session 和 Cookie 让服务器"记住"用户。
学完本章你将: 掌握 session_start/存储/销毁、setcookie、登录状态管理。
Cookie —— 存在浏览器端
php
<?php
// 设置 Cookie(必须在任何 HTML 输出前调用)
setcookie("username", "小明", time() + 3600 * 24 * 7, "/");
// 键 值 过期(7天后) 路径
// 读取
echo $_COOKIE["username"] ?? "未设置";
// 删除(设置过期时间为过去)
setcookie("username", "", time() - 3600, "/");
Session —— 存在服务器端
php
<?php
// 每次使用前必须启动会话
session_start();
// 存储
$_SESSION["user_id"] = 1;
$_SESSION["username"] = "小明";
// 读取
echo $_SESSION["username"];
// 销毁会话
session_destroy();
// 或只清除特定数据
unset($_SESSION["user_id"]);
登录状态管理
php
<?php
session_start();
// 登录
function login(int $userId, string $username): void {
$_SESSION["user_id"] = $userId;
$_SESSION["username"] = $username;
}
// 检查登录
function isLoggedIn(): bool {
return isset($_SESSION["user_id"]);
}
// 登出
function logout(): void {
$_SESSION = []; // 清空数据
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), "", time() - 42000, $params["path"]);
}
session_destroy();
}
// 使用
if (!isLoggedIn()) {
header("Location: login.php");
exit;
}