CakePHP - Gestion de session

Session nous permet de gérer des utilisateurs uniques à travers les demandes et stocke des données pour des utilisateurs spécifiques. Les données de session peuvent être accessibles n'importe où, n'importe où, où vous avez accès à l'objet de requête, c'est-à-dire que les sessions sont accessibles à partir des contrôleurs, des vues, des aides, des cellules et des composants.

Accéder à l'objet de session

L'objet de session peut être créé en exécutant le code suivant.

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

Écriture des données de session

Pour écrire quelque chose en session, nous pouvons utiliser le write() session méthode.

Session::write($key, $value)

La méthode ci-dessus prendra deux arguments, le value et le key sous, dans lequel la valeur sera stockée.

Exemple

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

Lecture des données de session

Pour récupérer les données stockées de la session, nous pouvons utiliser le read() session méthode.

Session::read($key)

La fonction ci-dessus ne prendra qu'un seul argument, c'est-à-dire the key of the value,qui a été utilisé au moment de l'écriture des données de session. Une fois que la clé correcte a été fournie, la fonction renvoie sa valeur.

Exemple

$session->read('name');

Lorsque vous souhaitez vérifier si des données particulières existent dans la session ou non, vous pouvez utiliser le check() session méthode.

Session::check($key)

La fonction ci-dessus ne prendra que la clé comme argument.

Exemple

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

Supprimer les données de session

Pour supprimer les données de la session, nous pouvons utiliser le delete() session méthode pour supprimer les données.

Session::delete($key)

La fonction ci-dessus ne prendra que la clé de la valeur à supprimer de la session.

Exemple

$session->delete('name');

Lorsque vous souhaitez lire puis supprimer des données de la session, nous pouvons utiliser le consume() session méthode.

static Session::consume($key)

La fonction ci-dessus ne prendra que la clé comme argument.

Exemple

$session->consume('name');

Détruire une session

Nous devons détruire une session utilisateur, lorsque l'utilisateur se déconnecte du site et détruire la session le destroy() méthode est utilisée.

Session::destroy()

Exemple

$session->destroy();

La destruction de session supprimera toutes les données de session du serveur, mais ne supprimera pas le cookie de session.

Renouveler une session

Dans une situation où vous souhaitez renouveler la session utilisateur, nous pouvons utiliser le renew() session méthode.

Session::renew()

Exemple

$session->renew();

Session complète

Apportez des modifications au config/routes.php fichier comme indiqué dans le programme suivant.

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

Créer un SessionsController.php déposer à src/Controller/SessionsController.php. Copiez le code suivant dans le fichier du contrôleur

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

Créer un annuaire Sessions à src/Template et sous ce répertoire, créez un View fichier appelé write_session_data.php. Copiez le code suivant dans ce fichier.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Créer un autre View fichier appelé retrieve_session_data.php sous le même Sessions répertoire et copiez le code suivant dans ce fichier.

src/Template/Sessions/retrieve_session_data.php

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

Créer un autre View fichier appelé check_session_data.ctp dans le même répertoire Sessions et copiez le code suivant dans ce fichier.

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

Créer un autre View fichier appelé delete_session_data.ctp, dans le même répertoire Sessions et copiez le code suivant dans ce fichier.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Créer un autre View fichier appelé destroy_session_data.ctp, dans le même répertoire Sessions et copiez le code suivant dans ce fichier.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Production

Exécutez l'exemple ci-dessus en visitant l'URL suivante. Cette URL vous aidera à écrire des données en session.

http: // localhost / cakephp4 / session-write

Visitez l'URL suivante to read session data − http://localhost/cakephp4/session-read

Visitez l'URL suivante to check session data - http: // localhost / cakephp4 / session-check

Visitez l'URL suivante to delete session data - http: // localhost / cakephp4 / session-delete Visitez le

Visitez l'URL suivante to destroy session data - http: // localhost / cakephp4 / session-destroy