Yii-sessions

提供:Dev Guides
移動先:案内検索

Yii-セッション

セッションにより、さまざまなページでデータにアクセスできます。 セッションは、すべてのセッション変数が保存されている一時ディレクトリにサーバー上のファイルを作成します。 このデータは、その特定のユーザーの訪問中にWebサイトのすべてのページで利用できます。

セッションが開始されると、次のことが起こります-

  • 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ブラウザのアドレスバーに *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 にアクセスすると、次のように表示されます。

アクションセッション