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