Quando abbiamo la necessità di memorizzare informazioni relative all'utente durante la sua navigazione possiamo utilizzare le sessioni. Symfony ci consente di utilizzarle attraverso il componente HttpFoundation
che è sempre presente in ogni installazione del framework PHP.
Per utilizzarle dobbiamo innanzitutto abilitarle nel file di configurazione che si trova sul percorso app/config/packages/framework.yaml
:
framework:
session:
enabled: true
Abilitandole, senza modificare le altre impostazioni, Symfony utilizzerà il meccanismo di default PHP e non avremo modo di accedere alla directory in cui vengono salvate le sessioni. In base alle necessità, però, possiamo anche decidere di far gestire a Symfony le sessioni e scegliere la strategia (Database, Redis, File System..).
Utilizzo delle Sessioni
Per utilizzare la sessione dell’utente abbiamo bisogno di iniettare il servizio Symfony\Component\HttpFoundation\RequestStack
nel nostro servizio e/o nel controller in cui vogliamo utilizzarle.
Gli attributi della sessione sono gestiti con l’AttributeBag
e quindi abbiamo a disposizione dei metodi per scrivere, leggere, svuotarne il contenuto ecc.
Supponiamo di avere la necessità di memorizzare la data in cui è stato effettuato l’ultimo accesso ad una pagina (ad esempio per verificare se i contenuti della pagina sono cambiati nel frattempo e quindi modificare la Response in base all’informazione) possiamo usare il seguente codice:
public function index(RequestStack $requestStack): Response
{
$session = $requestStack->getCurrentRequest()->getSession();
$session->set('last_page_visited_at', new \DateTime());
dump($session->get('last_page_visited_at'));
return $this->render('home/index.html.twig');
}
Il metodo set()
prende in ingresso due parametri: il nome dell’attributo ed il suo valore.
Abbiamo visto dall’esempio precedente che possiamo memorizzare qualsiasi cosa all’interno della sessione, non solo valori scalari. Nel nostro caso in effetti abbiamo memorizzato un oggetto di tipo DateTime
.
Il metodo get()
, invece, ci permette di recuperare un attributo attraverso il suo nome. La get()
in alto, infatti, recupera il dato appena salvato e lo mostra a schermo (nel pannello di debug
nel nostro caso, come rappresentato in Figura 1.