2016-10-13 1 views
0

Selon certains livres et codes en ligne Django, certaines valeurs sont passées en tant que variable de session lorsque vous avez besoin de rediriger (côté serveur) avec certaines variables de contexte, par ex. request.session['fruit'] = 'apple'.Django: request.session est stable même lorsque vous utilisez plusieurs serveurs?

Mais je me demande cela fonctionne très bien même quand je utilisateur plusieurs serveurs. (Appelons chaque serveur A, B, C)

Dans ce cas, la demande de l'utilisateur peut être HASARD envoyé à l'un de ces les serveurs. Par exemple, la première demande est envoyée à un serveur et la demande suivante est envoyée au serveur B et la troisième demande est renvoyée à un serveur. Donc, je pensais juste que les données de session (request.session) pourraient être perdues ou être en désordre en raison de ce caractère aléatoire.

Ai-je raison? ou Puisque la session est une donnée côté serveur basée sur l'ID de session cookie de l'utilisateur et enregistrée dans la base de données, donc je n'ai pas à m'inquiéter à ce sujet?

Merci :)

Répondre

0

Cela dépend du backend session que vous utilisez. Les bases de données sont généralement centralisées, donc peu importe quel serveur gère la requête si vous utilisez le backend de base de données.

Les caches peuvent être locaux sur le serveur. Vous devez en tenir compte si vous voulez utiliser le cache ou le backend db en cache. Le backend db mis en cache utilise un cache à écriture immédiate: les données ne sont extraites de la base de données que si le cache est vide ou lorsque de nouvelles données sont écrites. D'autres serveurs peuvent avoir des données obsolètes dans leur cache local si vous changez la session. Par conséquent, si vous utilisez le cache ou le backend db en cache, vous devez disposer d'un stockage de cache centralisé dans lequel les sessions peuvent être sauvegardées.

+0

J'utilise '' django.contrib.sessions.middleware.SessionMiddleware'', ce qui signifie que je n'ai pas à m'inquiéter de la session qui va gâcher? – user3595632

+0

@ user3595632 Vous avez besoin du middleware, quel que soit le backend de session que vous utilisez. Ce qui compte, c'est le réglage de votre ['SESSION_ENGINE'] (https://docs.djangoproject.com/fr/1.10/ref/settings/#session-engine), mais par défaut l'utilisation du backend de base de données. Donc, si vous n'avez pas changé la valeur par défaut (et que vous utilisez une base de données centralisée), vous n'avez rien à craindre. – knbk