会话是一种简单的方法,用于针对唯一的会话 ID 存储单个用户的数据。这可以用于在页面请求之间保持状态信息。会话 ID 通常通过会话 Cookie 发送到浏览器,并使用该 ID 检索现有的会话数据。没有 ID 或会话 Cookie 会让 PHP 知道要创建一个新会话并生成一个新的会话 ID。
会话遵循一个简单的流程。当会话启动时,PHP 将使用传递的 ID(通常来自会话 Cookie)检索现有会话,或者如果未传递会话,它将创建一个新会话。PHP 将在会话启动后使用任何会话数据填充 $_SESSION 超级全局变量。当 PHP 关闭时,它将自动获取 $_SESSION 超级全局变量的内容,将其序列化,并使用会话保存处理程序将其发送到存储位置。
默认情况下,PHP 使用内部 files
保存处理程序,该处理程序由 session.save_handler 设置。这将保存服务器上由 session.save_path 配置指令指定的位置的会话数据。
可以使用 session_start() 函数手动启动会话。如果 session.auto_start 指令设置为 1
,则会话将在请求启动时自动启动。
会话通常在 PHP 完成执行脚本时自动关闭,但可以使用 session_write_close() 函数手动关闭。
示例 #1 使用 $_SESSION 注册变量。
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
示例 #2 使用 $_SESSION 注销变量。
<?php
session_start();
unset($_SESSION['count']);
?>
您不能在会话变量中使用引用,因为没有可行的方法可以恢复对另一个变量的引用。
注意:
基于文件的会话(PHP 中的默认值)在通过 session_start() 或隐式通过 session.auto_start 打开会话后会锁定会话文件。锁定后,任何其他脚本都无法访问同一个会话文件,直到第一个脚本终止或调用 session_write_close() 为止。
这很可能在使用 AJAX 且具有多个并发请求的网站上出现问题。最简单的解决方法是在对会话进行了必要的更改后立即调用 session_write_close(),最好是在脚本的早期阶段。或者,可以使用支持并发的其他会话后端。