Gestione della sessione in Node.js

La gestione della sessione in Node.js è fondamentale per mantenere lo stato tra le richieste HTTP, soprattutto nelle applicazioni web che richiedono l'autenticazione dell'utente. Node.js, essendo stateless per natura, necessita di strumenti esterni per gestire le sessioni, come ad esempio express-session.

Installazione del Middleware

Per iniziare, è necessario installare il pacchetto express-session:

npm install express express-session

Configurazione di express-session

Una volta installato, possiamo configurare express-session nel nostro server Express:

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
  secret: 'mia-chiave-segreta',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false } // impostare true se si usa HTTPS
}));

Utilizzo della Sessione

Dopo la configurazione, possiamo accedere e modificare i dati di sessione tramite req.session:

app.get('/login', (req, res) => {
  req.session.utente = 'Mario';
  res.send('Utente loggato');
});

app.get('/profilo', (req, res) => {
  if (req.session.utente) {
    res.send(`Profilo di ${req.session.utente}`);
  } else {
    res.send('Utente non autenticato');
  }
});

Persistenza della Sessione

Per ambienti di produzione, si consiglia di usare uno store persistente come connect-redis o connect-mongo, invece della memoria predefinita:

npm install connect-redis redis
const RedisStore = require('connect-redis').default;
const session = require('express-session');
const redis = require('redis');

let redisClient = redis.createClient();

app.use(session({
  store: new RedisStore({ client: redisClient }),
  secret: 'mia-chiave-segreta',
  resave: false,
  saveUninitialized: false
}));

Conclusione

La gestione della sessione in Node.js con express-session è semplice e potente. Permette di mantenere lo stato dell'utente e di costruire applicazioni web sicure ed efficienti. Tuttavia, per una maggiore scalabilità e sicurezza, è consigliabile integrare una soluzione di storage esterna e utilizzare HTTPS in produzione.

Torna su