PHP Session 学习笔记

什么是 Session?

在 Web 开发中,Session 是一种用于在服务器端存储用户信息的机制。当用户访问网站时,服务器会为该用户创建一个独立的 Session,并在该 Session 中存储需要保持状态的数据或用户身份验证信息。当用户访问网站的其他页面时,服务器可以通过读取该 Session 中的数据来判断用户是否已经登录、是否有权限进行某些操作等。

如何使用 Session?

使用 PHP 使用 Session 首先需要启动 Session。我们可以通过调用 session_start() 函数来启动 Session:

phpCopy Code
<?php session_start(); ?>

Session 启动后,我们可以通过 $_SESSION 超全局数组来存储和访问 Session 中的数据。例如,在下面的示例中我们将一个名为 username 的变量存储到 Session 中,然后在另一个脚本文件中读取它:

设置 Session:

phpCopy Code
<?php // 启动 Session session_start(); // 存储变量到 Session 中 $_SESSION['username'] = 'Alice'; // 跳转到另一个页面 header('Location: /other_page.php'); ?>

读取 Session:

phpCopy Code
<?php // 启动 Session session_start(); // 读取 Session 中的变量 $username = $_SESSION['username']; // 输出变量值 echo $username; ?>

Session 相关配置

Session 存储位置

默认情况下,Session 数据会存储在服务器的临时目录中。如果需要更改 Session 存储位置,可以通过 session_save_path() 函数来设置。例如:

phpCopy Code
<?php // 将 Session 存储位置设置为 /tmp 目录下 session_save_path('/tmp'); ?>

Session 过期时间

Session 数据默认情况下会在关闭浏览器或者空闲一定时间后被删除。可以通过 session.gc_maxlifetime 配置项来设置 Session 的过期时间,单位为秒。例如:

phpCopy Code
<?php // 将 Session 过期时间设置为 1 小时 ini_set('session.gc_maxlifetime', 3600); ?>

Session ID

Session ID 是用于唯一标识一个 Session 的字符串。在默认情况下,PHP 会使用基于 Cookie 或 URL 参数的方式来传递 Session ID。可以通过 session.use_only_cookiessession.use_trans_sid 配置项来设置使用哪种方式传递 Session ID。建议使用基于 Cookie 的方式来传递 Session ID,因为 URL 参数的方式存在一些安全风险。

示例应用

以下是一个简单的示例应用,通过 Session 实现用户登录功能:

phpCopy Code
<?php session_start(); // 如果用户已经登录,跳转到欢迎页面 if (isset($_SESSION['username'])) { header('Location: /welcome.php'); exit; } // 如果用户提交了表单,进行验证并存储 Session if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = $_POST['username']; $password = $_POST['password']; // 进行用户名和密码的验证 // ... if (验证通过) { $_SESSION['username'] = $username; header('Location: /welcome.php'); exit; } else { $error = '用户名或密码错误'; } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <?php if (isset($error)): ?> <div><?php echo $error; ?></div> <?php endif; ?> <form method="post"> <label for="username">用户名:</label> <input type="text" name="username" id="username" required> <br> <label for="password">密码:</label> <input type="password" name="password" id="password" required> <br> <button type="submit">登录</button> </form> </body> </html>

在上述代码中,我们首先启动了 Session。然后进行了用户的登录验证,如果验证通过,则将用户名存储到 Session 中,并跳转到欢迎页面;否则显示错误信息。登录页面的 HTML 代码包括一个表单,用户可以在此输入用户名和密码进行登录操作。