Cakephp-session-management

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

CakePHP-セッション管理

セッションを使用すると、リクエスト全体で一意のユーザーを管理し、特定のユーザーのデータを保存できます。 セッションデータは、リクエストオブジェクトにアクセスできる場所であればどこからでもアクセスできます。つまり、セッションは、コントローラー、ビュー、ヘルパー、セル、コンポーネントからアクセスできます。

セッションオブジェクトへのアクセス

セッションオブジェクトは、次のコードを実行して作成できます。

$session = $this->request->session();

セッションデータの書き込み

セッションで何かを書くには、 write()session メソッドを使用できます。

Session::write($key, $value)

上記のメソッドは、値が格納される valuekey の2つの引数を取ります。

$session->write('name', 'Virat Gandhi');

セッションデータの読み取り

セッションから保存されたデータを取得するには、 read()session メソッドを使用できます。

Session::read($key)

上記の関数は、セッションデータの書き込み時に使用された*値のキー*である引数を1つだけ取ります。 正しいキーが提供されると、関数はその値を返します。

$session->read('name');

特定のデータがセッションに存在するかどうかを確認する場合は、 check()session メソッドを使用できます。

Session::check($key)

上記の関数は引数としてキーのみを取ります。

if ($session->check('name')) {
  //name exists and is not null.
}

セッションデータを削除する

セッションからデータを削除するには、 delete()session メソッドを使用してデータを削除します。

Session::delete($key)

上記の関数は、セッションから削除される値のキーのみを取ります。

$session->delete('name');

セッションからデータを読み取って削除する場合は、 consume()session メソッドを使用できます。

static Session::consume($key)

上記の関数は引数としてキーのみを取ります。

$session->consume('name');

セッションの破棄

ユーザーがサイトからログアウトしたときにユーザーセッションを破棄し、* destroy()*メソッドを使用してセッションを破棄する必要があります。

Session::destroy()

$session->destroy();

セッションを破棄すると、サーバーからすべてのセッションデータが削除されますが、セッションCookieは削除されません。

セッションを更新する

ユーザーセッションを更新したい状況では、 renew()session メソッドを使用できます。

Session::renew()

$session->renew();

完全なセッション

Make changes in the config/routes.php file as shown in the following program.
*config/routes.php*
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/sessionobject',
         ['controller'=>'Sessions','action'=>'index']);
      $routes->connect('/sessionread',
         ['controller'=>'Sessions','action'=>'retrieve_session_data']);
      $routes->connect('/sessionwrite',
         ['controller'=>'Sessions','action'=>'write_session_data']);
      $routes->connect('/sessioncheck',
         ['controller'=>'Sessions','action'=>'check_session_data']);
      $routes->connect('/sessiondelete',
         ['controller'=>'Sessions','action'=>'delete_session_data']);
      $routes->connect('/sessiondestroy',
         ['controller'=>'Sessions','action'=>'destroy_session_data']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();
*src/Controller/SessionsController.php* に *SessionsController.php* ファイルを作成します。 次のコードをコントローラーファイルにコピーします。
*src/Controller/SessionsController.php*
<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class SessionsController extends AppController{
      public function retrieveSessionData(){
        //create session object
         $session = $this->request->session();

        //read data from session
         $name = $session->read('name');
         $this->set('name',$name);
      }
      public function writeSessionData(){
        //create session object
         $session = $this->request->session();

        //write data in session
         $session->write('name','Virat Gandhi');
      }
      public function checkSessionData(){
        //create session object
         $session = $this->request->session();

        //check session data
         $name = $session->check('name');
         $address = $session->check('address');
         $this->set('name',$name);
         $this->set('address',$address);
      }
      public function deleteSessionData(){
        //create session object
         $session = $this->request->session();

        //delete session data
         $session->delete('name');
      }
      public function destroySessionData(){
        //create session object
         $session = $this->request->session();

        //destroy session
         $session->destroy();
      }
   }
?>
*srcs/Template* に *Sessions* ディレクトリを作成し、そのディレクトリの下に *write_session_data.ctp* という *View* ファイルを作成します。 そのファイルに次のコードをコピーします。
*src/Template/Sessions/write_session_data.ctp*
The data has been written in session.

同じ Sessions ディレクトリの下に retrieve_session_data.ctp という別の View ファイルを作成し、そのファイルに次のコードをコピーします。

*src/Template/Sessions/retrieve_session_data.ctp*
Here is the data from session.
Name: <?=$name;?>

同じSessionsディレクトリの下に check_session_data.ctp という別の View ファイルを作成し、そのファイルに次のコードをコピーします。

*src/Template/Sessions/check_session_data.ctp*
<?php if($name): ?>
name exists in the session.

<?php else: ?>
name doesn't exist in the database

<?php endif;?>
<?php if($address): ?>
address exists in the session.

<?php else: ?>
address doesn't exist in the database

<?php endif;?>

同じセッションディレクトリに delete_session_data.ctp という別のfilbe View を作成し、そのファイルに次のコードをコピーします。

*src/Template/Sessions/delete_session_data.ctp*
Data deleted from session.

同じSessionsディレクトリに destroy_session_data.ctp という別の View ファイルを作成し、そのファイルに次のコードをコピーします。

*src/Template/Sessions/destroy_session_data.ctp*
Session Destroyed.

出力

次のURLにアクセスして、上記の例を実行します。 このURLは、セッションでデータを書き込むのに役立ちます。

*http://localhost:85/CakePHP/session-write*

セッション

次のURLにアクセスして、セッションデータを読み取ります*- http://localhost:85/CakePHP/session-read

CakePHPセッション

次のURLにアクセスして、セッションデータを確認します*- http://localhost:85/CakePHP/sessioncheck

セッション

次のURLにアクセスして*セッションデータを削除します*- http://localhost:85/CakePHP/sessiondelete

セッションの削除

次のURLにアクセスして、セッションデータを破棄します*- http://localhost:85/CakePHP/sessiondestroy

セッションが破棄されました