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: 

Articoli correlati
  • 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

Amazon lancia nuovi corsi di formazione gratuiti sull’intelligenza artificiale generativa

L'iniziativa "AI Ready" di Amazon, offre lezioni online per sviluppatori e altri professionisti tecnici, nonché per studenti delle scuole superiori…

29 Novembre 2023

Cos’è l’intelligenza artificiale generativa: come funziona, vantaggi e pericoli

L’intelligenza artificiale generativa è l’argomento di discussione tecnologico più caldo del 2023. Cos’è l’intelligenza artificiale generativa, come funziona e di…

28 Novembre 2023

Rainbow, la soluzione di telefonia e collaborazione basata su cloud di Alcatel-Lucent Enterprise, ottiene la prestigiosa certificazione CSPN da ANSSI

Alcatel-Lucent Enterprise è orgogliosa di annunciare che la sua piattaforma di collaborazione, Rainbow™ by Alcatel-Lucent Enterprise ha ottenuto la Certificazione…

28 Novembre 2023

BYD arriva a quota 6 milioni di veicoli a nuova energia prodotti

BYD ha centrato un risultato storico: sei milioni di veicoli a nuova energia usciti dalla catena di montaggio dello stabilimento…

28 Novembre 2023

Veracode rivoluziona la sicurezza cloud-native con un duo dinamico: DAST Essentials e Veracode GitHub App

Il leader della sicurezza nell'ambito dei software intelligenti presenta una difesa unificata contro le minacce dalla programmazione al cloud in…

28 Novembre 2023

Il software di finanza autonoma di HighRadius riceve il sesto brevetto IA per la funzionalità di acquisizione di dati da documenti

HighRadius ha creato oltre 25 brevetti registrati e in corso di registrazione; quello più recente è stato concesso per modelli…

28 Novembre 2023

Reply si aggiudica due AWS Partner Awards 2023: System Integrator Partner of the Year EMEA e Energy and Utilities Partner of the Year Global

Reply è stata premiata come System Integration Partner of the Year EMEA e Industry Partner of the Year Energy and…

28 Novembre 2023

Dialogare con Luigi Einaudi oggi è possibile, grazie all’intelligenza artificiale

Fondazione Einaudi, Fondazione Compagnia di San Paolo e Reply insieme per rendere l’eredità culturale di Luigi Einaudi accessibile a tutti.…

28 Novembre 2023

bp sceglie AssetWise Lifecycle Information Management e AssetWise Reliability come standard per la gestione delle informazioni e l’integrità degli asset

Per un approccio a livello aziendale alla gestione delle informazioni sugli asset in parallelo con la gestione dell'integrità strutturale e…

27 Novembre 2023

Innovazioni basate sull’intelligenza artificiale all’#RSNA23 che consentono agli operatori sanitari di concentrarsi sulla cura dei pazienti

Le nuove innovazioni aiutano gli ospedali e i sistemi sanitari a fornire costantemente ai pazienti cure accessibili e di alta…

26 Novembre 2023