CakePHP - Управление сеансом

Сеанс позволяет нам управлять уникальными пользователями по запросам и хранить данные для конкретных пользователей. Данные сеанса могут быть доступны где угодно и где угодно, где у вас есть доступ к объекту запроса, т.е. сеансы доступны из контроллеров, представлений, помощников, ячеек и компонентов.

Доступ к объекту сеанса

Объект сеанса можно создать, выполнив следующий код.

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

Запись данных сеанса

Чтобы написать что-нибудь в сеансе, мы можем использовать write() session метод.

Session::write($key, $value)

Вышеупомянутый метод будет принимать два аргумента: value и key под, под которым будет храниться значение.

пример

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

Чтение данных сеанса

Чтобы получить сохраненные данные из сеанса, мы можем использовать read() session метод.

Session::read($key)

Вышеупомянутая функция будет принимать только один аргумент, то есть the key of the value,который использовался во время записи данных сеанса. Как только будет указан правильный ключ, функция вернет его значение.

пример

$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();

Завершить сеанс

Внесите изменения в config/routes.php файл, как показано в следующей программе.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/session-object',['controller'=>'Sessions','action'=>'index']);
   $builder->connect('/session-read',['controller'=>'Sessions','action'=>'retrieve_session_data']);
   $builder->connect('/session-write',['controller'=>'Sessions','action'=> 'write_session_data']);
   $builder->connect('/session-check',['controller'=>'Sessions','action'=>'check_session_data']);
   $builder->connect('/session-delete',['controller'=>'Sessions','action'=>'delete_session_data']);
   $builder->connect('/session-destroy',['controller'=>'Sessions','action'=>'destroy_session_data']);
   $builder->fallbacks();
});

Создать SessionsController.php файл в src/Controller/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->getSession();
      //read data from session
      $name = $session->read('name');
      $this->set('name',$name);
   }
   public function writeSessionData(){
      //create session object
      $session = $this->request->getSession();
      //write data in session
      $session->write('name','Virat Gandhi');
   }
   public function checkSessionData(){
      //create session object
      $session = $this->request->getSession();
      //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->getSession();
      //delete session data
      $session->delete('name');
   }
   public function destroySessionData(){
      //create session object
      $session = $this->request->getSession();
      //destroy session
      $session->destroy();
   }
}
?>

Создать каталог Sessions в src/Template и в этом каталоге создайте View файл называется write_session_data.php. Скопируйте следующий код в этот файл.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Создать еще один View файл называется retrieve_session_data.php под тем же Sessions каталог и скопируйте следующий код в этот файл.

src/Template/Sessions/retrieve_session_data.php

Here is the data from session.
Name: <?=$name;?>

Создать еще один View файл называется check_session_data.ctp в том же каталоге сеансов и скопируйте в этот файл следующий код.

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;?>

Создать еще один View файл называется delete_session_data.ctp, в том же каталоге сеансов и скопируйте в этот файл следующий код.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Создать еще один View файл называется destroy_session_data.ctp, в том же каталоге сеансов и скопируйте в этот файл следующий код.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Вывод

Выполните приведенный выше пример, посетив следующий URL-адрес. Этот URL-адрес поможет вам записывать данные в сеансе.

http: // локальный / cakephp4 / сеанс записи

Посетите следующий URL to read session data − http://localhost/cakephp4/session-read

Посетите следующий URL to check session data - http: // localhost / cakephp4 / session-check

Посетите следующий URL to delete session data - http: // localhost / cakephp4 / session-delete Посетите

Посетите следующий URL to destroy session data - http: // localhost / cakephp4 / session-destroy