会话是一种简单的方法,用于针对唯一的会话 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(),最好在脚本的早期调用。或者,可以使用支持并发的其他会话后端。