在 php 中,每个需要读取会话的页面都要先调用 session_start()。登录通过后,把用户 id 写入 $_session。同一浏览器带着会话 cookie 访问另一页时,php 会恢复这份会话数据。
登录成功后保存用户 ID
在真实项目中,把以下代码接在凭据校验成功之后。示例的 $authenticatedUserId 由已有认证逻辑提供。请在发送响应正文前运行这段代码。
session_start();
if (!session_regenerate_id(true)) {
throw new RuntimeException('Failed to renew session');
}
$_SESSION['user_id'] = $authenticatedUserId;
session_write_close();
重新生成会话 ID 可以避免继续使用认证前的 ID。业务数据留在服务端,不要把会话 ID 打印到页面。
在另一页读取会话并返回对应状态
把下例保存为 profile.php。若未恢复到带有用户 ID 的会话,直接返回 401。
立即学习“PHP免费学习笔记(深入)”;
由 ReMe 驱动的记忆管理系统,支持跨会话记忆持久化、自动应用用户偏好以及智能上下文压缩...
<?php
session_start();
header('Content-Type: text/plain; charset=utf-8');
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
exit("Login required\n");
}
echo "Session restored\n";
验证时先用应用已有登录页登录,再打开 profile.php。同一浏览器应看到 Session restored。
用无会话请求验证 401
将端口替换为练习环境实际端口。另开无痕窗口,也可以确认没有继承普通窗口的会话。
curl -i http://127.0.0.1:8000/profile.php
若已登录仍得到 401,先查登录响应有无 Set-Cookie,再查后续请求有无发送 Cookie。核对域名、路径和 HTTPS 设置,以及两页是否使用同一个会话存储。


















