Il protocollo HTTP è stateless. Le sesssioni lo rendono stateful.
Le ssssioni servono per mantenere traccia degli stati per ogni singolo utente (es. user id dell'utente loggato, contenuto del carrello...).
Le sessioni vengono gestite automaticamente da Rails, che crea una nuova sessione ogni volta che un utente accede all'applicazione, e carica la sessione esistente se un utente ha già usato l'applicazione.
Una sessione è un hash di valori con un id sessione (stringa di 32 caratteri di solito) che identifia l'hash. Ogni cookie inviato al browser contiene l'id sessione. E il browser invia l'id sessione ad ogni richiesta al server.
Rubare l'id sessione di un utente permette ad un attacker di usare l'applicazione web come fosse l'utente.