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://: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://:8080/index.php?r=site/access-session**,您將看到以下內容。

Action Session
廣告
© . All rights reserved.