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