Articoli

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: 

    Articoli correlati
    Newsletter sull’Innovazione
    Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.
    • utilizzando l’helper della global 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

    Newsletter sull’Innovazione
    Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

    Leggi Innovazione nella tua Lingua

    Newsletter sull’Innovazione
    Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

    Seguici