Maison >Opération et maintenance >Sécurité >conception de cohérence de session
Cohérence des sessions
Qu'est-ce qu'une session
Le serveur Web peut créer automatiquement des sessions pour les utilisateurs accédant au même navigateur et fournir des fonctions de stockage. Généralement, les informations de connexion de l'utilisateur sont stockées dans la session.
Quel est le problème de cohérence de session ?
Lorsqu'il n'y a qu'un seul serveur Web dans le backend, la session correcte peut être trouvée pour chaque requête http. Le problème est qu'il ne peut pas assurer la haute disponibilité. Si un serveur raccroche, ce sera terminé. Redondance + basculement, déployez plusieurs serveurs Web et routes nginx vers différents serveurs Web. Chaque requête http est acheminée et il n'est pas garanti qu'elle soit acheminée vers le même serveur, ce qui entraîne des problèmes de cohérence.
Solutions courantes pour résoudre la cohérence des sessions
Hash cohérent
La première solution qui vient à l'esprit est de hacher en fonction de l'adresse IP du client pour garantir que la même IP tombe sur le même site Web sur le serveur. Vous pouvez également utiliser des hachages basés sur des champs métier, tels que userId et cityId, qui sont plus flexibles à utiliser. Cependant, cela détruit le principe d’unicité et rend la passerelle et l’entreprise collantes. Il n’est pas recommandé de l’utiliser sauf si cela est nécessaire. Avantages : Enregistre le cache, peut être étendu horizontalement. Inconvénients : lorsque certains services sont redémarrés, les sessions seront perdues, ce qui obligera certains utilisateurs à se reconnecter. Si le hachage est étendu horizontalement et que la session est redistribuée après le rehachage, certains utilisateurs ne pourront pas acheminer la session
synchronisation de session
Les sessions entre plusieurs serveurs Web sont synchronisées les unes avec les autres , de sorte que chaque serveur Web contient toutes les informations de session. Inconvénients : Comme il contient toutes les sessions, le nombre de clusters est limité par la mémoire et l'extension est limitée.
Stockage du client
Les informations de connexion sont enregistrées sur le client et chaque demande contient des informations sur l'utilisateur. Le serveur est complètement apatride et facile à étendre. Avantages : Aucun stockage n’est requis côté serveur. Inconvénients : chaque requête http transporte des informations sur l'utilisateur, ce qui gaspille du trafic ; il existe un risque de fuite d'informations. Les cookies ne peuvent pas stocker trop d'informations.
Stockage centralisé back-end
Le serveur Web est lié à un stockage unifié pour enregistrer les informations de session. Il est recommandé de les stocker dans le cluster Redis pour faciliter l'expansion ultérieure. Avantages : Il n'y a aucun risque de fuite d'informations ; l'expansion horizontale ne perd pas de données. Inconvénients : Une requête réseau supplémentaire est ajoutée et le code métier doit être modifié pour interroger Redis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!