Cosa sono le sessioni in Laravel, configurazione e utilizzo con esempi
Le sessioni laravel consentono di memorizzare informazioni, e scambiarle tra le richieste nella tua applicazione web.
Sessioni laravel sono un modo semplice per rendere persistenti i dati per l’utente corrente. Questo tutorial ti darà le basi per lavorare con le sessioni in Laravel.
Tempo di lettura stimato: 5 minuti
Cos’è la sessione Laravel
In Laravel, una sessione è un modo per memorizzare informazioni, per gestire correttamente le richieste effettuate da un utente. Quando un utente avvia un’applicazione Laravel, una sessione si avvia automaticamente per quell’utente. I dati della sessione vengono memorizzati sul server e un piccolo cookie con un identificatore univoco viene inviato al browser dell’utente per identificare la sessione.
Puoi utilizzare la sessione per archiviare i dati che desideri utilizzare su più pagine o richieste. Ad esempio, potresti utilizzare la sessione per l’autenticazione dell’utente o archiviare altre informazioni che desideri utilizzare durante la sessione sulla tua applicazione.
Configurazione della sessione Laravel
Per utilizzare le sessioni in Laravel, devi prima abilitarle nel file config/session.php
di configurazione. In questo file è possibile impostare parametri di configurazione relativi alle sessioni. Ad esempio la durata della sessione, il driver da utilizzare per l’archiviazione dei dati della sessione e il percorso di archiviazione per i dati della sessione.
Il file ha le seguenti opzioni di configurazione:
- driver: Specifica il driver di sessione predefinito da utilizzare. Laravel supporta diversi driver di sessione: file, cookie, database, apc, memcached, redis, dynamodb e array;
- lifetime: Specifica il numero di minuti in cui la sessione deve essere considerata valida;
- expire_on_close: Se impostato su true, la sessione scadrà alla chiusura del browser dell’utente;
- encrypt: true vuol dire che il framework crittograferà i dati della sessione prima che vengano archiviati;
- files: Se viene utilizzato il driver della sessione file, questa opzione specifica la posizione di archiviazione del file;
- connection: Se viene utilizzato il driver di sessione del database, questa opzione specifica la connessione al database da utilizzare;
- table: Se viene utilizzato il driver della sessione del database, questa opzione specifica la tabella del database da utilizzare per memorizzare i dati della sessione;
- lottery: Una matrice di valori utilizzata per selezionare in modo casuale un valore del cookie dell’ID di sessione;
- cookie: Questa opzione specifica il nome del cookie che verrà utilizzato per memorizzare l’ID di sessione. Le opzioni path, domain, secure, http_only e same_site vengono utilizzate per configurare le impostazioni dei cookie per la sessione.
Qui di seguito un esempio di file sessions.php
con durata sessione 120 secondi, uso dei file memorizzati nella directory framework/sessions
:
<?php
use Illuminate\Support\Str;
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => env('SESSION_CONNECTION', null),
'table' => 'sessions',
'store' => env('SESSION_STORE', null),
'lottery' => [2, 100],
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE'),
'http_only' => true,
'same_site' => 'lax',
];
È inoltre possibile configurare la sessione utilizzando le variabili di ambiente nel file .env
. Ad esempio, per utilizzare il driver di sessione del database e archiviare i dati della sessione in una tabella delle sessioni, con DB di tipo MySQL, è possibile impostare le seguenti variabili di ambiente:
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_CONNECTION=mysql
SESSION_TABLE=sessions
Impostazione della sessione Laravel
Esistono tre modi per lavorare con i dati della sessione in Laravel:
- utilizzando l’
helper
dellaglobal session
; - utilizzando la Session facade;
- tramite una
Request instance
.
In tutti questi casi, i dati che memorizzi nella sessione saranno disponibili nelle successive richieste effettuate dallo stesso utente fino alla scadenza della sessione o alla distruzione manuale.
Global Session Helper
In Laravel, l’utilizzo della funzione Global Session Helper
è un modo conveniente per accedere ai servizi di sessione forniti dal framework. Ti consente di archiviare e recuperare i dati dalla sessione nella tua applicazione. Ecco un esempio di come utilizzare il session helper
:
// Store data in the session
session(['key' => 'value']);
// Retrieve data from the session
$value = session('key');
// Remove data from the session
session()->forget('key');
// Clearing the Entire Session
session()->flush();
Puoi anche passare un valore predefinito come secondo argomento alla funzione session
, che verrà restituito se la chiave specificata non viene trovata nella sessione:
$value = session('key', 'default');
Istanza di Session Request
In Laravel, un’istanza di richiesta di sessione fa riferimento a un oggetto che rappresenta una richiesta HTTP e contiene informazioni sulla richiesta, come il metodo di richiesta (GET, POST, PUT, ecc.), l’URL della richiesta, le intestazioni della richiesta e la richiesta corpo. Contiene inoltre vari metodi che possono essere utilizzati per recuperare e manipolare queste informazioni.
In genere si accede all’istanza della Session Request
tramite la variabile $request
in un’applicazione Laravel. Ad esempio, è possibile accedere a una sessione tramite un’istanza di richiesta utilizzando la funzione helper session()
.
use Illuminate\Http\Request;
class ExampleController extends Controller
{
public function example(Request $request)
{
// Store data in the session using the put function
$request->session()->put('key', 'value');
// Retrieve data from the session using the get function
$value = $request->session()->get('key');
// Check if a value exists in the session using the has function:
if ($request->session()->has('key')) {
// The key exists in the session.
}
// To determine if a value exists in the session, even if its value is null:
if ($request->session()->exists('users')) {
// The value exists in the session.
}
// Remove data from the session using the forget function
$request->session()->forget('key');
}
}
In questo esempio, la variabile $request
è un’istanza della classe Illuminate\Http\Request
, che rappresenta la richiesta HTTP corrente. La funzione session
dell’istanza di richiesta restituisce un’istanza della classe Illuminate\Session\Store
, che fornisce varie funzioni per lavorare con la sessione.
Letture Correlate
Ercole Palmeri