CakePHP - Gestión de sesiones

La sesión nos permite administrar usuarios únicos en todas las solicitudes y almacena datos para usuarios específicos. Los datos de la sesión pueden ser accesibles en cualquier lugar, en cualquier lugar, donde tenga acceso al objeto de solicitud, es decir, las sesiones son accesibles desde controladores, vistas, ayudantes, celdas y componentes.

Acceso al objeto de sesión

El objeto de sesión se puede crear ejecutando el siguiente código.

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

Escribir datos de sesión

Para escribir algo en sesión, podemos usar el write() session método.

Session::write($key, $value)

El método anterior tomará dos argumentos, el value y el key bajo, que se almacenará el valor.

Ejemplo

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

Leer datos de la sesión

Para recuperar los datos almacenados de la sesión, podemos usar el read() session método.

Session::read($key)

La función anterior tomará solo un argumento, es decir the key of the value,que se utilizó en el momento de escribir los datos de la sesión. Una vez que se proporcionó la clave correcta, la función devolverá su valor.

Ejemplo

$session->read('name');

Cuando desee comprobar si existen datos concretos en la sesión o no, puede utilizar el check() session método.

Session::check($key)

La función anterior solo tomará key como argumento.

Ejemplo

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

Eliminar datos de sesión

Para eliminar datos de la sesión, podemos utilizar el delete() session método para eliminar los datos.

Session::delete($key)

La función anterior tomará solo la clave del valor que se eliminará de la sesión.

Ejemplo

$session->delete('name');

Cuando desee leer y luego eliminar datos de la sesión, podemos usar el consume() session método.

static Session::consume($key)

La función anterior solo tomará la clave como argumento.

Ejemplo

$session->consume('name');

Destruir una sesión

Necesitamos destruir una sesión de usuario, cuando el usuario se desconecta del sitio y destruir la sesión, el destroy() se utiliza el método.

Session::destroy()

Ejemplo

$session->destroy();

La destrucción de la sesión eliminará todos los datos de la sesión del servidor, pero no eliminará la cookie de sesión.

Renovar una sesión

En una situación, en la que desea renovar la sesión de usuario, podemos usar el renew() session método.

Session::renew()

Ejemplo

$session->renew();

Sesión completa

Realice cambios en el config/routes.php archivo como se muestra en el siguiente programa.

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

Crear un SessionsController.php archivar en src/Controller/SessionsController.php. Copie el siguiente código en el archivo del 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();
   }
}
?>

Crea un directorio Sessions a src/Template y bajo ese directorio crea un View archivo llamado write_session_data.php. Copie el siguiente código en ese archivo.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Crea otro View archivo llamado retrieve_session_data.php bajo el mismo Sessions directorio y copie el siguiente código en ese archivo.

src/Template/Sessions/retrieve_session_data.php

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

Crea otro View archivo llamado check_session_data.ctp en el mismo directorio de Sesiones y copie el siguiente código en ese archivo.

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

Crea otro View archivo llamado delete_session_data.ctp, en el mismo directorio de Sesiones y copie el siguiente código en ese archivo.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Crea otro View archivo llamado destroy_session_data.ctp, en el mismo directorio de Sesiones y copie el siguiente código en ese archivo.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Salida

Ejecute el ejemplo anterior visitando la siguiente URL. Esta URL le ayudará a escribir datos en sesión.

http: // localhost / cakephp4 / session-write

Visite la siguiente URL to read session data − http://localhost/cakephp4/session-read

Visite la siguiente URL to check session data - http: // localhost / cakephp4 / session-check

Visite la siguiente URL to delete session data - http: // localhost / cakephp4 / session-delete Visite el

Visite la siguiente URL to destroy session data - http: // localhost / cakephp4 / session-destroy