Yii - 会话

会话使数据可以在各个页面之间访问。会话在服务器上的临时目录中创建一个文件,所有会话变量都存储在其中。在特定用户访问期间,此数据可供您网站的所有页面使用。

会话启动时,会发生以下情况 −

  • PHP 为该特定会话创建一个唯一 ID。

  • 客户端(向浏览器)发送一个名为 PHPSESSID 的 cookie。

  • 服务器在临时文件夹中创建一个文件,所有会话变量都保存在其中。

  • 当服务器想要从会话变量中检索值时,PHP 会自动从 PHPSESSID cookie 中获取唯一会话 ID。然后,它会在临时目录中查找所需的文件。

要启动会话,您应该调用 session_start() 函数。所有会话变量都存储在 $_SESSION 全局变量中。您还可以使用 isset() 函数检查会话变量是否已设置 −

<?php
   session_start();
   if( isset( $_SESSION['number'] ) ) {
      $_SESSION['number'] += 1;
   }else {
      $_SESSION['number'] = 1;
   }
   $msg = "This page was visited ".  $_SESSION['number'];
   $msg .= "in this session.";
   echo $msg;
?>

要销毁会话,应调用 session_destroy() 函数。要销毁单个会话变量,应调用 unset() 函数 −

<?php
   unset($_SESSION['number']);
   session_destroy();
?>

在 Yii 中使用会话

会话允许在用户请求之间持久保存数据。在 PHP 中,您可以通过 $_SESSION 变量访问它们。在 Yii 中,您可以通过会话应用程序组件访问会话。

步骤 1 − 将 actionOpenAndCloseSession 方法添加到 SiteController

public function actionOpenAndCloseSession() {
    $session = Yii::$app->session;
    // 打开会话
    $session->open();
    // 检查会话是否已打开
    if ($session->isActive) echo "session is active";
    // 关闭会话
    $session->close();
    // 销毁注册到会话的所有数据
    $session->destroy();
}

在上面的代码中,我们获取了 session 应用组件,打开一个 session,检查它是否处于活动状态,关闭 session,最后销毁它。

步骤 2 − 在 Web 浏览器的地址栏中输入 http://localhost:8080/index.php?r=site/open-and-close-session,您将看到以下内容。

Session Active

要访问 session 变量,您可以使用 set()get() 方法。

步骤 3 −向 SiteController 添加一个 actionAccessSession 方法。

public function actionAccessSession() {

    $session = Yii::$app->session;
    
    // 设置会话变量
    $session->set('language', 'ru-RU');
    
    // 获取会话变量
    $language = $session->get('language');
    var_dump($language);
    
    // 删除会话变量
    $session->remove('language');
    
    // 检查会话变量是否存在
    if (!$session->has('language')) echo "language is not set";
    
    $session['captcha'] = [
    'value' => 'aSBS23',
    'lifetime' => 7200,
    ];
    var_dump($session['captcha']);
}

步骤 4 − 转到 http://localhost:8080/index.php?r=site/access-session,您将看到以下内容。

Action Session