Articoli

Cosa sono le sessioni in Laravel, configurazione e utilizzo con esempi

Le sessioni di Laravel consentono di memorizzare informazioni, e scambiarle tra le richieste nella tua applicazione web. 

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.

Cos’è la sessione di 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 in 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 di Laravel

Esistono tre modi per lavorare con i dati della sessione in Laravel: 

  • 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.

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

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.

Ercole Palmeri

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

Articoli recenti

Idea Brillante: Bandalux presenta Airpure®, la tenda che purifica l’aria

Risultato della costante innovazione tecnologica e all'impegno nei confronti dell'ambiente e del benessere delle persone. Bandalux presenta Airpure®, una tenda…

12 Aprile 2024

Design Patterns V.s. principi S.O.L.I.D., vantaggi e svantaggi

I design pattern sono soluzioni specifiche di basso livello a problemi ricorrenti nella progettazione del software. I design pattern sono…

11 Aprile 2024

Magica, l’app iOS che semplifica la vita degli automobilisti nella gestione del proprio veicolo

Magica è l'app per iPhone che rende la gestione dei veicoli semplice ed efficiente, aiutando gli automobilisti a risparmiare e…

11 Aprile 2024

Grafici di Excel, quali sono, come creare un grafico e come scegliere il grafico ottimale

Un grafico di Excel è un elemento visivo che rappresenta i dati presenti in un foglio di lavoro di Excel.…

9 Aprile 2024