Z
ZHANK
表单与请求

Session 与 Cookie

session_start/存储/销毁、setcookie、$_COOKIE、登录状态管理

Session 与 Cookie

HTTP 是无状态的——每次请求都是独立的。Session 和 Cookie 让服务器"记住"用户。

学完本章你将: 掌握 session_start/存储/销毁、setcookie、登录状态管理。


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;
}