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 - 在网络浏览器的地址栏中输入http://localhost:8080/index.php?r=site/open-and-close-session,您将看到以下内容。

会话活跃

要访问会话变量,您可以使用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 - 转到http://localhost:8080/index.php?r=site/access-session,您将看到以下内容。

行动会议