基本用法

会话是一种简单的方法,用于针对唯一的会话 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']);
?>

注意

不要使用 unset($_SESSION) 注销整个 $_SESSION,因为这将禁用通过 $_SESSION 超级全局变量注册会话变量。

警告

您不能在会话变量中使用引用,因为没有可行的方法可以恢复对另一个变量的引用。

注意:

基于文件的会话(PHP 中的默认值)在通过 session_start() 或隐式通过 session.auto_start 打开会话后会锁定会话文件。锁定后,任何其他脚本都无法访问同一个会话文件,直到第一个脚本终止或调用 session_write_close() 为止。

这很可能在使用 AJAX 且具有多个并发请求的网站上出现问题。最简单的解决方法是在对会话进行了必要的更改后立即调用 session_write_close(),最好是在脚本的早期阶段。或者,可以使用支持并发的其他会话后端。

添加备注

用户贡献的笔记

此页面没有用户贡献的笔记。
To Top