Cookie, Local Storage e IndexedDB: cos'è davvero una sessione

Accedere scrive in tre posti distinti. Sapere quale è quale spiega perché le sessioni sopravvivono ad alcune cose, si rompono con altre, e perché sincronizzare un profilo deve spostarli tutti e tre.
"Essere connessi" sembra una cosa sola. Sono almeno tre, memorizzate in tre posti diversi con tre durate diverse, e la differenza spiega la maggior parte dei comportamenti confusi in cui ci si imbatte spostando le sessioni tra computer.
Cookie
Piccole coppie chiave-valore, inviate automaticamente a ogni richiesta al sito che le ha impostate. È qui che di solito vive il token di sessione.
- Limitati a un dominio e a un percorso, con una data di scadenza.
- Un cookie `Secure` viene inviato solo su HTTPS; un cookie `HttpOnly` è invisibile al JavaScript della pagina.
- Un cookie di sessione non ha scadenza e deve sparire alla chiusura del browser.
I cookie sono i più piccoli dei tre e i più determinanti. Se li perdi, sei disconnesso.
Local Storage e Session Storage
Memorizzazione chiave-valore di stringhe, letta e scritta dal JavaScript della pagina, limitata per origine. Non viene mai inviata con una richiesta. La pagina deve leggerla di proposito.
Le applicazioni vi conservano preferenze, dettagli del profilo in cache, feature flag e spesso un refresh token. Il Local Storage persiste finché non viene cancellato; il Session Storage dura solo quanto la scheda.
IndexedDB
Un vero database nel browser: record strutturati, indici, transazioni. È qui che un'applicazione web moderna tiene tutto ciò che è sostanzioso: cronologie di messaggi in cache, code offline, chiavi di cifratura per le funzioni con cifratura end-to-end.
Perché conta per un profilo
Dà un significato preciso a "isolamento". Due profili sono isolati quando tutti e tre questi elementi sono separati, più la cache e lo stato delle estensioni. Uno strumento che isola i cookie e condivide IndexedDB ha isolato il terzo facile del problema.
Fissa anche l'asticella per spostare un profilo tra computer. Portare con sé solo i cookie riproduce la forma di una sessione senza la sua sostanza.
| Archivio | Scritto da | Contiene tipicamente |
|---|---|---|
| Cookie | Server e script della pagina | Token di sessione, preferenze, identificatori di tracciamento |
| Local Storage | Script della pagina | Refresh token, stato dell'interfaccia, dettagli del profilo in cache |
| Session Storage | Script della pagina | Stato per scheda, scartato alla chiusura della scheda |
| IndexedDB | Script della pagina | Dati in cache, code offline, chiavi di cifratura |
Spostare una sessione tra i propri computer
PowerOps cattura cookie, Local Storage e IndexedDB alla chiusura di un profilo e li ripristina quando si apre altrove. Ogni categoria è un interruttore, per l'intero workspace o per un singolo profilo, così puoi spostare esattamente quanto intendi spostare.
Vale la pena conoscere due proprietà di come funziona:
- Lo snapshot viene cifrato sul computer di origine, con una chiave che appartiene al workspace, e decifrato sul computer che apre il profilo. Non è una cifratura end-to-end: il servizio conserva una copia di quella chiave perché i tuoi altri computer possano riceverla.
- Un profilo è aperto su un solo computer alla volta. Mentre è aperto detiene un lease, e agli altri dispositivi viene detto quale dispositivo lo ha, anziché permettere di biforcare la sessione in due copie divergenti.
Il secondo punto è una limitazione voluta. Due computer che modificano indipendentemente una sessione producono due sessioni semi-valide e, assai spesso, un account disconnesso su entrambi. Un contenitore di cookie non ha modo di risolvere un conflitto di merge.
Cosa portarsi a casa
Chiudi i profili anziché terminarli forzatamente. La scrittura alla chiusura è ciò che rende portatile la sessione, ed è l'abitudine più economica di questo elenco.

