Yii會話Sessions

會話使數據可在不同頁面之間訪問。會話創建服務器上的臨時目錄文件中,所有會話變量都會被存儲。這個數據是提供給所有特定用戶在訪問您的網站的網頁期間使用。

當一個會話開始時,會發生以下情況 -

  • PHP創建特定會話的唯一ID。

  • 有一個 PHPSESSID 的 cookie 要發送到客戶端(瀏覽器)。

  • 創建在所有會話變量都保存在臨時文件夾中的文件。

  • 當服務器想要從會話變量檢索一個值,PHP自動獲得 cookie 來自PHPSESSID的唯一會話ID。然後,它會在臨時目錄查找所需的文件。

要啓動一個會話,應該調用 session_start()函數。要啓動一個會話,應該調用在 session_start()函數。 也可以使用使用 isset()函數來檢查會話變量是否已設置 -

 

要銷燬會話,應該調用 session_destroy() 函數。要銷燬單個會話變量調用 isset()函數 -

在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,會看到以下內容:
Yii會話Sessions

要訪問會話變量,可以使用 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,會看到以下內容:
Yii會話Sessions