CakePHP - Gestione delle sessioni
La sessione ci consente di gestire utenti unici attraverso richieste e memorizza i dati per utenti specifici. I dati della sessione possono essere accessibili ovunque, ovunque, dove si ha accesso all'oggetto richiesta, ovvero le sessioni sono accessibili da controller, viste, helper, celle e componenti.
Accesso all'oggetto Session
L'oggetto Session può essere creato eseguendo il codice seguente.
$session = $this->request->session();
Scrittura dei dati della sessione
Per scrivere qualcosa in sessione, possiamo usare il file write() session metodo.
Session::write($key, $value)
Il metodo precedente richiederà due argomenti, il value e il key sotto il quale verrà memorizzato il valore.
Esempio
$session->write('name', 'Virat Gandhi');
Lettura dei dati della sessione
Per recuperare i dati memorizzati dalla sessione, possiamo utilizzare il read() session metodo.
Session::read($key)
La funzione di cui sopra richiederà un solo argomento, cioè the key of the value,utilizzato al momento della scrittura dei dati di sessione. Una volta fornita la chiave corretta, la funzione restituirà il suo valore.
Esempio
$session->read('name');
Quando si desidera verificare se nella sessione esistono o meno dati particolari, è possibile utilizzare il file check() session metodo.
Session::check($key)
La funzione sopra prenderà solo la chiave come argomento.
Esempio
if ($session->check('name')) {
// name exists and is not null.
}
Elimina i dati della sessione
Per eliminare i dati dalla sessione, possiamo utilizzare il file delete() session metodo per eliminare i dati.
Session::delete($key)
La funzione precedente richiederà solo la chiave del valore da eliminare dalla sessione.
Esempio
$session->delete('name');
Quando si desidera leggere e quindi eliminare i dati dalla sessione, possiamo utilizzare il file consume() session metodo.
static Session::consume($key)
La funzione di cui sopra prenderà solo la chiave come argomento.
Esempio
$session->consume('name');
Distruggere una sessione
Abbiamo bisogno di distruggere una sessione utente, quando l'utente si disconnette dal sito e di distruggere la sessione il file destroy() viene utilizzato il metodo.
Session::destroy()
Esempio
$session->destroy();
La distruzione della sessione rimuoverà tutti i dati della sessione dal server, ma non rimuoverà il cookie della sessione.
Rinnova una sessione
In una situazione in cui desideri rinnovare la sessione utente, possiamo utilizzare l'estensione renew() session metodo.
Session::renew()
Esempio
$session->renew();
Sessione completa
Apporta modifiche nel file config/routes.php file come mostrato nel seguente programma.
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();
});
Creare un SessionsController.php file in src/Controller/SessionsController.php. Copiare il codice seguente nel file del controller
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 una directory Sessions a src/Template e sotto quella directory creare un file View file chiamato write_session_data.php. Copia il codice seguente in quel file.
src/Template/Sessions/write_session_data.php
The data has been written in session.
Creane un altro View file chiamato retrieve_session_data.php sotto lo stesso Sessions directory e copia il codice seguente in quel file.
src/Template/Sessions/retrieve_session_data.php
Here is the data from session.
Name: <?=$name;?>
Creane un altro View file chiamato check_session_data.ctp nella stessa directory Sessions e copia il codice seguente in quel file.
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;?>
Creane un altro View file chiamato delete_session_data.ctp, nella stessa directory Sessions e copia il codice seguente in quel file.
src/Template/Sessions/delete_session_data.ctp
Data deleted from session.
Creane un altro View file chiamato destroy_session_data.ctp, nella stessa directory Sessions e copia il codice seguente in quel file.
src/Template/Sessions/destroy_session_data.ctp
Session Destroyed.
Produzione
Esegui l'esempio precedente visitando il seguente URL. Questo URL ti aiuterà a scrivere i dati nella sessione.
http: // localhost / cakephp4 / session-write
Visita il seguente URL to read session data − http://localhost/cakephp4/session-read
Visita il seguente URL to check session data - http: // localhost / cakephp4 / session-check
Visita il seguente URL to delete session data - http: // localhost / cakephp4 / session-delete Visita il
Visita il seguente URL to destroy session data - http: // localhost / cakephp4 / session-destroy