2010-12-12 88 views
1

J'ai écrit une application django et je l'ai mise sur un serveur CentOS. C'est vraiment correct quand j'utilise le serveur web de développement django.problème de session avec django + apache + mod_wsgi

Tel que je le lance par "python ./manage.py runserver", et accède à ce serveur à partir du navigateur sur un autre ordinateur. Je peux signer en une fois et accéder à toutes les pages sans problème.

Cependant quand je l'exécute avec apache + mod_wsgi, je viens de trouver que je dois me connecter avec l'utilisateur et le mot de passe heure par heure. Je pense que peut-être il y a un problème avec le middleware de session, alors, comment puis-je trouver la cause première et le réparer?

Répondre

2

Il existe plusieurs options pour cela.

Afin de likelyhood (AMHA):

  • Le back-end de la session utilise le système de cache pour stocker les sessions et que vous utilisez le backend de cache locmem
  • Le back-end de la session ne stocke pas les biscuits (sécurisé activer les cookies? temporisations cookie? date incorrecte sur le serveur?)
  • le middleware de la session pourrait ne pas être chargé (paramètres personnalisés pour le serveur de production?)

Le stockage de la session dans le cache est seulement une bonne solution si vous utilisez memcached comme backend du cache. Donc, si vous stockez les sessions dans le cache, assurez-vous d'utiliser memcache :)

De toute façon, vérifier si SESSION_ENGINE est réglé sur django.contrib.sessions.backends.db

+0

Mes réglages d'entre eux sont: 'CACHE_BACKEND = « file: //% s '% os.path.join (os.path.dirname (__ fichier __),' cache '). replace (' \\ ','/') ', et' SESSION_ENGINE = django.contrib.sessions.backends.db' . Est-ce que cela cause un problème? J'ai vérifié le dossier de ** cache **, il n'y a aucun dossier. Mais je lui ai déjà donné la permission de 766, ai-je raison? – William

+0

J'utilise maintenant le mode démon 'WSGIDaemonProcess myapp user = groupe apache = apache threads = 25'. – William

+1

@William: Si votre moteur de session est défini sur '... backends.db' que vous n'utilisez pas le backend du cache pour stocker les sessions. Dans ce cas, je suppose que c'est une sorte de problème de cookie. Vous pouvez le tester comme ceci: http://docs.djangoproject.com/fr/dev/topics/http/sessions/#setting-test-cookies – Wolph