CakePHP - Gerenciamento de Sessão

A sessão nos permite gerenciar usuários únicos em solicitações e armazena dados para usuários específicos. Os dados da sessão podem ser acessados ​​em qualquer lugar, em qualquer lugar, onde você tenha acesso ao objeto de solicitação, ou seja, as sessões são acessíveis a partir de controladores, visualizações, auxiliares, células e componentes.

Acessando objeto de sessão

O objeto de sessão pode ser criado executando o código a seguir.

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

Gravando dados da sessão

Para escrever algo na sessão, podemos usar o write() session método.

Session::write($key, $value)

O método acima terá dois argumentos, o value e a key sob o qual o valor será armazenado.

Exemplo

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

Lendo os dados da sessão

Para recuperar os dados armazenados da sessão, podemos usar o read() session método.

Session::read($key)

A função acima terá apenas um argumento, que é the key of the value,que foi usado no momento da gravação dos dados da sessão. Assim que a chave correta for fornecida, a função retornará seu valor.

Exemplo

$session->read('name');

Quando você quiser verificar se existem dados específicos na sessão ou não, você pode usar o check() session método.

Session::check($key)

A função acima terá apenas a chave como argumento.

Exemplo

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

Excluir dados da sessão

Para excluir dados da sessão, podemos usar o delete() session método para excluir os dados.

Session::delete($key)

A função acima levará apenas a chave do valor a ser excluído da sessão.

Exemplo

$session->delete('name');

Quando você quiser ler e excluir dados da sessão, podemos usar o consume() session método.

static Session::consume($key)

A função acima terá apenas a chave como argumento.

Exemplo

$session->consume('name');

Destruindo uma Sessão

Precisamos destruir uma sessão de usuário, quando o usuário se desconecta do site e para destruir a sessão, destroy() método é usado.

Session::destroy()

Exemplo

$session->destroy();

A destruição da sessão removerá todos os dados da sessão do servidor, mas não removerá o cookie da sessão.

Renovar uma Sessão

Em uma situação em que você deseja renovar a sessão do usuário, podemos usar o renew() session método.

Session::renew()

Exemplo

$session->renew();

Sessão Completa

Faça alterações no config/routes.php arquivo conforme mostrado no programa a seguir.

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

Criar uma SessionsController.php arquivo em src/Controller/SessionsController.php. Copie o seguinte código no arquivo do controlador

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();
   }
}
?>

Crie um diretório Sessions em src/Template e sob esse diretório crie um View arquivo chamado write_session_data.php. Copie o código a seguir nesse arquivo.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Crie outro View arquivo chamado retrieve_session_data.php sob o mesmo Sessions diretório e copie o código a seguir nesse arquivo.

src/Template/Sessions/retrieve_session_data.php

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

Crie outro View arquivo chamado check_session_data.ctp no mesmo diretório Sessions e copie o código a seguir nesse arquivo.

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

Crie outro View arquivo chamado delete_session_data.ctp, no mesmo diretório Sessions e copie o código a seguir nesse arquivo.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Crie outro View arquivo chamado destroy_session_data.ctp, no mesmo diretório Sessions e copie o código a seguir nesse arquivo.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Resultado

Execute o exemplo acima visitando o seguinte URL. Este URL o ajudará a escrever dados na sessão.

http: // localhost / cakephp4 / session-write

Visite o seguinte URL to read session data − http://localhost/cakephp4/session-read

Visite o seguinte URL to check session data - http: // localhost / cakephp4 / session-check

Visite o seguinte URL to delete session data - http: // localhost / cakephp4 / session-delete Visite o

Visite o seguinte URL to destroy session data - http: // localhost / cakephp4 / session-destroy