本文概述
会话使我们能够针对每个用户请求跨多个页面访问数据。通过会话在服务器上的临时目录中创建一个文件来存储所有会话变量。在特定用户访问期间, 此存储的数据可用于网站的所有页面。
在PHP中, 可以通过$ _SESSION全局变量访问会话。
会话开始后,
- 将为该特定会话生成唯一的ID。
- Cookie被发送到客户端。
- 所有这些会话变量都保存在服务器上的临时文件夹中。
- 从会话变量中检索值时, 它会自动从cookie中获取唯一的会话ID。然后, 它会在临时文件夹中查找特定文件。
会议开幕和闭幕
让我们看一个打开和关闭会话的例子。
步骤1转到SiteController.php文件。添加操作actionCheckStatus。
public function actionCheckStatus()
{
$session = Yii::$app->session;
// open a session
$session->open();
// check if a session is already active
if ($session->isActive) echo "Session is Active";
// close a session
$session->close();
// destroys all data registered to a session
$session->destroy();
}
查看上面的代码, 它显示会话打开, 会话关闭, 检查会话是否处于活动状态并破坏该会话。
步骤2使用网址在浏览器上运行它,
http://localhost/sess/frontend/web/index.php?r = site / check-status
访问会话数据
在访问数据期间, 如果没有会话正在运行, 则会话将自动启动它。
要访问会话中存储的数据, 请运行以下代码。
$session = Yii::$app->session;
// get a session variable. The following usages are equivalent:
$language = $session->get('language');
$language = $session['language'];
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;
// set a session variable. The following usages are equivalent:
$session->set('language', 'en-US');
$session['language'] = 'en-US';
$_SESSION['language'] = 'en-US';
// remove a session variable. The following usages are equivalent:
$session->remove('language');
unset($session['language']);
unset($_SESSION['language']);
// check if a session variable exists. The following usages are equivalent:
if ($session->has('language')) ...
if (isset($session['language'])) ...
if (isset($_SESSION['language'])) ...
// traverse all session variables. The following usages are equivalent:
foreach ($session as $name => $value) ...
foreach ($_SESSION as $name => $value) ...