Cookies, Local Storage et IndexedDB : ce qu'est réellement une session

Se connecter écrit dans trois endroits distincts. Savoir lequel est lequel explique pourquoi les sessions survivent à certaines choses, cassent avec d'autres, et pourquoi synchroniser un profil impose de déplacer les trois.
"Être connecté" donne l'impression d'une seule chose. Ce sont au moins trois choses, stockées dans trois endroits différents avec trois durées de vie différentes, et cette différence explique la plupart des comportements déroutants que l'on rencontre en déplaçant des sessions d'une machine à l'autre.
Cookies
De petites paires clé-valeur, envoyées automatiquement avec chaque requête vers le site qui les a posées. C'est là que se trouve généralement le jeton de session.
- Limités à un domaine et à un chemin, avec une date d'expiration.
- Un cookie `Secure` n'est envoyé qu'en HTTPS ; un cookie `HttpOnly` est invisible pour le JavaScript de la page.
- Un cookie de session n'a pas d'expiration et est censé disparaître à la fermeture du navigateur.
Les cookies sont les plus petits des trois et les plus déterminants. Perdez-les et vous êtes déconnecté.
Local Storage et Session Storage
Un stockage clé-valeur de chaînes, lu et écrit par le JavaScript de la page, limité à chaque origine. Il n'est jamais envoyé avec une requête. La page doit le lire délibérément.
Les applications y conservent des préférences, des informations de profil en cache, des indicateurs de fonctionnalités et souvent un jeton de rafraîchissement. Le Local Storage persiste jusqu'à son effacement ; le Session Storage ne dure que le temps de l'onglet.
IndexedDB
Une vraie base de données dans le navigateur : enregistrements structurés, index, transactions. C'est là qu'une application web moderne garde tout ce qui est substantiel : historiques de messages en cache, files d'attente hors ligne, clés de chiffrement pour les fonctions chiffrées de bout en bout.
Pourquoi cela compte pour un profil
Cela donne un sens précis à "l'isolation". Deux profils sont isolés quand ces trois éléments sont séparés, ainsi que le cache et l'état des extensions. Un outil qui isole les cookies et partage IndexedDB a isolé le tiers facile du problème.
Cela fixe aussi la barre pour déplacer un profil entre machines. Transporter les seuls cookies reproduit la forme d'une session sans sa substance.
| Stockage | Écrit par | Contient typiquement |
|---|---|---|
| Cookies | Serveur et script de la page | Jeton de session, préférences, identifiants de suivi |
| Local Storage | Script de la page | Jetons de rafraîchissement, état de l'interface, informations de profil en cache |
| Session Storage | Script de la page | État par onglet, supprimé à la fermeture de l'onglet |
| IndexedDB | Script de la page | Données en cache, files d'attente hors ligne, clés de chiffrement |
Déplacer une session entre vos propres machines
PowerOps capture les cookies, le Local Storage et IndexedDB à la fermeture d'un profil et les restaure à son ouverture ailleurs. Chaque catégorie est un interrupteur, pour tout l'espace de travail ou pour un seul profil, de sorte que vous déplacez exactement ce que vous voulez.
Deux propriétés méritent d'être connues sur ce fonctionnement :
- L'instantané est chiffré sur la machine d'origine, avec une clé qui appartient à l'espace de travail, puis déchiffré sur la machine qui ouvre le profil. Ce n'est pas du chiffrement de bout en bout : le service conserve une copie de cette clé pour que vos autres ordinateurs puissent le recevoir.
- Un profil n'est ouvert que sur une machine à la fois. Tant qu'il est ouvert, il détient un bail, et un autre appareil est informé de celui qui le détient plutôt que d'être autorisé à scinder la session en deux copies divergentes.
Ce second point est une limite délibérée. Deux machines qui modifient indépendamment une même session produisent deux sessions à moitié valides et, assez souvent, un compte déconnecté sur les deux. Un bocal à cookies n'a aucun moyen de résoudre un conflit de fusion.
Ce qu'il faut retenir en pratique
Fermez les profils plutôt que de les tuer. L'écriture à la fermeture est ce qui rend la session portable, et c'est l'habitude la moins coûteuse de cette liste.

