探索 PHP 会话控制:从 Cookie 到 Session 的实战应用

2025-12-10 22阅读

在 Web 开发中,“记住用户登录状态”“保存临时数据” 是必备需求,PHP 的会话控制(Cookie+Session)就是解决这类问题的核心技术。它能让无状态的 HTTP 协议 “记住” 用户信息,本文通过简单实例,带你快速掌握从基础使用到安全优化的完整流程。

202410231729651478163200.jpg

一、会话控制基础:Cookie 与 Session 的区别

  • Cookie:数据存储在用户浏览器,体积小(一般≤4KB),可设置有效期,适合存非敏感信息(如 “记住登录” 标识)。

  • Session:数据存储在服务器,安全度高,依赖 Cookie 传递 SessionID,适合存敏感信息(如用户账号、权限)。

二、实战 1:用 Cookie 实现 “记住用户名”

前端页面(login.html)

<form action="set_cookie.php" method="post">
  用户名:<input type="text" name="username"><br>
  <input type="checkbox" name="remember" value="1"> 记住用户名<br>
  <button type="submit">提交</button>
</form>


后端处理(set_cookie.php)

<?php
if (isset($_POST['username'])) {
  $username = $_POST['username'];
  // 若勾选“记住”,设置Cookie有效期为7天
  if (isset($_POST['remember'])) {
    setcookie('saved_username', $username, time() + 7*24*3600);
  } else {
    // 不记住则删除Cookie
    setcookie('saved_username', '', time() - 3600);
  }
  echo "操作成功!<a href='get_cookie.php'>查看Cookie</a>";
}
?>

读取 Cookie(get_cookie.php)

<?php
// 读取Cookie中的用户名
$username = $_COOKIE['saved_username'] ?? '未记住用户名';
echo "记住的用户名:" . $username;
?>

三、实战 2:用 Session 实现用户登录状态

登录处理(login_session.php)

<?php
session_start(); // 启动Session
if (isset($_POST['username']) && $_POST['username'] === 'admin') {
  // 存储用户信息到Session
  $_SESSION['user'] = [
    'username' => 'admin',
    'role' => '管理员'
  ];
  echo "登录成功!<a href='user_info.php'>查看用户信息</a>";
} else {
  echo "用户名错误!";
}
?>

读取 Session(user_info.php)

<?php
session_start();
// 验证是否登录
if (!isset($_SESSION['user'])) {
  die("请先登录!");
}
echo "当前用户:" . $_SESSION['user']['username'] . "<br>";
echo "用户权限:" . $_SESSION['user']['role'];
?>

四、安全注意事项

  1. Cookie 安全:敏感信息不要存 Cookie,必要时加密;

  2. Session 安全:设置session.cookie_httponly = On(防止 JS 窃取 SessionID);

  3. 及时销毁:用户退出时调用session_destroy()销毁 Session。

总结

PHP 的 Cookie 和 Session 各有场景:Cookie 轻量易用,适合存非敏感临时数据;Session 安全可靠,是用户状态管理的核心。掌握这两个工具,就能实现 Web 开发中 “用户身份维持”“数据临时存储” 等高频需求,让你的网站交互更流畅、更安全。


文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]