PHP开发教程

Yii会话Sessions

会话使数据可在不同页面之间访问。会话创建服务器上的临时目录文件中,所有会话变量都会被存储。这个数据是提供给所有特定用户在访问您的网站的网页期间使用。

当一个会话开始时,会发生以下情况 -

  • PHP创建特定会话的唯一ID。

  • 有一个 PHPSESSID 的 cookie 要发送到客户端(浏览器)。

  • 创建在所有会话变量都保存在临时文件夹中的文件。

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

要启动一个会话,应该调用 session_start()函数。要启动一个会话,应该调用在 session_start()函数。 也可以使用使用 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() 函数。要销毁单个会话变量调用 isset()函数 -

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

11.png

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

第3步 - 添加 actionAccessSession()方法到 SiteController。

public function actionAccessSession() {

   $session = Yii::$app->session;
	
   // set a session variable
   $session->set('language', 'Chinese');
	
   // 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' => 'Yiibai',
      'lifetime' => 7200,
   ];
   var_dump($session['captcha']);
}

第4步 - 访问 http://localhost:8080/index.php?r=site/access-session,会看到以下内容:

11.png

Powered by PHP二次开发 ©2008-2017