Session 的工作原理可以理解为服务器与浏览器之间的一场 "秘密握手",下面通过用户登录的简化例子说明:
首次访问(创建 Session)
当用户首次访问网站(如login.php),PHP 执行session_start()时:
→ 服务器为该用户生成 唯一 Session ID(如q3e8d9b0c7a)
→ 在服务器创建对应的存储文件(如/tmp/sess_q3e8d9b0c7a)
→ 通过 Set-Cookie 响应头 将 Session ID 发送给浏览器(如PHPSESSID=q3e8d9b0c7a)后续请求(识别用户)
当用户提交登录表单时,浏览器自动携带 Cookie 中的 Session ID:
→ PHP 再次调用session_start()
→ 服务器根据PHPSESSID=q3e8d9b0c7a找到对应存储文件
→ 存储登录凭证:$_SESSION['user'] = 'Alice'
(该数据写入服务器文件,而非浏览器)访问其他页面(维持状态)
当用户跳转到profile.php时:
→ 浏览器继续携带相同 Session ID
→ 服务器读取文件中的$_SESSION['user']
→ 页面显示 "您好,Alice!"
// ⚙️ 服务器端流程示例(PHP) // login.php session_start(); // 1. 创建/查找会话文件 $_SESSION['user'] = 'Alice'; // 2. 将数据存入服务器文件 // profile.php session_start(); // 3. 通过Cookie找到会话文件 echo "您好," . $_SESSION['user'] . "!"; // 4. 输出 → "您好,Alice!"
关键特点:
▸ 敏感数据始终保存在服务器(安全)
▸ 浏览器仅持有无意义的 ID(钥匙)
▸ 会话默认在浏览器关闭后失效(或服务器超时清除)
💡 本质:Session ID 是连接无状态 HTTP 请求的"记忆绳索",服务器通过它找到属于该用户的临时数据仓库(
$_SESSION),实现跨请求的状态保持。