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;
   // open a session
   $session->open();
   // check if a session is already opened
   if ($session->isActive) echo "session is active";
   // close a session
   $session->close();
   // destroys all data registered to a session
   $session->destroy();
}

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

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

Session Active

要访问会话变量,可以使用 **set()** 和 **get()** 方法。

**步骤 3** - 将 **actionAccessSession** 方法添加到 **SiteController**。

public function actionAccessSession() {

   $session = Yii::$app->session;
	
   // set a session variable
   $session->set('language', 'ru-RU');
	
   // get a session variable
   $language = $session->get('language');
   var_dump($language);
		  
   // remove a session variable
   $session->remove('language');
		  
   // check if a session variable exists
   if (!$session->has('language')) echo "language is not set";
		  
   $session['captcha'] = [
      'value' => 'aSBS23',
      'lifetime' => 7200,
   ];
   var_dump($session['captcha']);
}

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

Action Session
广告