CakePHP - Zarządzanie sesjami

Sesja pozwala nam zarządzać unikalnymi użytkownikami w ramach żądań i przechowuje dane dla określonych użytkowników. Dane sesji mogą być dostępne w każdym miejscu, w którym masz dostęp do obiektu żądania, tj. Sesje są dostępne z kontrolerów, widoków, pomocników, komórek i komponentów.

Dostęp do obiektu sesji

Obiekt sesji można utworzyć, wykonując następujący kod.

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

Zapisywanie danych sesji

Aby napisać coś w sesji, możemy użyć write() session metoda.

Session::write($key, $value)

Powyższa metoda przyjmie dwa argumenty, plik value i key pod którym wartość będzie przechowywana.

Przykład

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

Czytanie danych sesji

Aby odzyskać zapisane dane z sesji, możemy użyć rozszerzenia read() session metoda.

Session::read($key)

Powyższa funkcja przyjmuje tylko jeden argument, to znaczy the key of the value,który był używany podczas zapisywania danych sesji. Po podaniu prawidłowego klucza funkcja zwróci jego wartość.

Przykład

$session->read('name');

Jeśli chcesz sprawdzić, czy określone dane istnieją w sesji, czy nie, możesz użyć pliku check() session metoda.

Session::check($key)

Powyższa funkcja weźmie tylko klucz jako argument.

Przykład

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

Usuń dane sesji

Aby usunąć dane z sesji, możemy skorzystać z delete() session metoda usunięcia danych.

Session::delete($key)

Powyższa funkcja weźmie tylko klucz wartości do usunięcia z sesji.

Przykład

$session->delete('name');

Jeśli chcesz odczytać, a następnie usunąć dane z sesji, możemy użyć pliku consume() session metoda.

static Session::consume($key)

Powyższa funkcja weźmie tylko klucz jako argument.

Przykład

$session->consume('name');

Niszczenie sesji

Musimy zniszczyć sesję użytkownika, gdy użytkownik wyloguje się z serwisu i zlikwidować sesję destroy() metoda jest używana.

Session::destroy()

Przykład

$session->destroy();

Zniszczenie sesji spowoduje usunięcie wszystkich danych sesji z serwera, ale nie spowoduje usunięcia plików cookie sesji.

Odnów sesję

W sytuacji, gdy zechcesz odnowić sesję użytkownika, możemy skorzystać z rozszerzenia renew() session metoda.

Session::renew()

Przykład

$session->renew();

Ukończ sesję

Wprowadź zmiany w config/routes.php plik, jak pokazano w następującym programie.

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

Stwórz SessionsController.php plik w src/Controller/SessionsController.php. Skopiuj następujący kod w pliku kontrolera

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

Utwórz katalog Sessions w src/Template iw tym katalogu utwórz plik View plik o nazwie write_session_data.php. Skopiuj następujący kod w tym pliku.

src/Template/Sessions/write_session_data.php

The data has been written in session.

Utwórz kolejny View plik o nazwie retrieve_session_data.php pod tym samym Sessions katalog i skopiuj następujący kod w tym pliku.

src/Template/Sessions/retrieve_session_data.php

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

Utwórz kolejny View plik o nazwie check_session_data.ctp w tym samym katalogu Sessions i skopiuj następujący kod w tym pliku.

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

Utwórz kolejny View plik o nazwie delete_session_data.ctp, w tym samym katalogu Sessions i skopiuj następujący kod w tym pliku.

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

Utwórz kolejny View plik o nazwie destroy_session_data.ctp, w tym samym katalogu Sessions i skopiuj następujący kod w tym pliku.

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

Wynik

Wykonaj powyższy przykład, odwiedzając następujący adres URL. Ten adres URL pomoże ci zapisać dane w sesji.

http: // localhost / cakephp4 / session-write

Odwiedź następujący adres URL to read session data − http://localhost/cakephp4/session-read

Odwiedź następujący adres URL to check session data - http: // localhost / cakephp4 / session-check

Odwiedź następujący adres URL to delete session data - http: // localhost / cakephp4 / session-delete Odwiedź witrynę

Odwiedź następujący adres URL to destroy session data - http: // localhost / cakephp4 / session-zniszczenie