Si nous avons deux applications Django site1 et site2 exécutées sur différents ports du même serveur en même temps, et que nous nous connectons à partir de différents onglets du même navigateur en même temps. Ensuite, cette situation se produit lorsque nous nous connectons au site2, les utilisateurs connectés sur le site1 seront expulsés.
Pourquoi cela arrive-t-il ? Ceci est lié au framework de session de Django. Voici une brève introduction : Lorsque nous visitons un site Web Django pour la première fois, Django générera une session pour enregistrer certaines informations sur la session en cours. Dans le même temps, une valeur de hachage session_key sera générée et un cookie sera généré et envoyé au client. Le nom de ce cookie est défini en fonction du SESSION_COOKIE_NAME dans le paramètre. La valeur par défaut est "sessionid" (c'est nous qui soulignons). De cette façon, la session_key sera envoyée au serveur avec le cookie la prochaine fois. Le serveur recherche l'objet de session correspondant en fonction de session_key et obtient les informations de la session en cours, y compris bien sûr les informations de connexion.
Il n'y a donc qu'une seule vérité dans la situation ci-dessus (Conan pousse le visage avec des lunettes) :
Lorsque nous nous connectons au site1, nous obtenons un cookie appelé sessionid , qui stocke session_key1.
Lorsque nous nous connectons au site2, le cookie appelé sessionid sera mis à jour, et maintenant sa valeur est session_key2 (le navigateur stocke les cookies en fonction de l'IP au lieu du port, donc le même nom sera être mis à jour les cookies).
Alors maintenant, lorsque nous utilisons la nouvelle session_key pour accéder au site1, nous ne pourrons pas obtenir les informations de connexion d'origine et nous devons nous reconnecter.
Alors, comment résoudre ce problème ? Après avoir compris le mécanisme ci-dessus, il vous suffit de définir SESSION_COOKIE_NAME dans les paramètres. Par exemple, vous pouvez définir SESSION_COOKIE_NAME = 'site2' dans site2 et utiliser la valeur par défaut dans site1. Bien entendu, site1 et site2 peuvent également être définis en même temps.
Pour des explications plus détaillées sur la façon d'activer les applications Django avec différents ports sur le même serveur pour être ouvertes dans le même navigateur, veuillez faire attention au site Web PHP chinois pour les articles connexes !