2011-09-15 28 views
11

Tengo varios proyectos de Django que se ejecutan en un servidor usando gunicorn y nginx. Actualmente están configurados para ejecutarse en un puerto único de la misma dirección IP utilizando la directiva del servidor en nginx. Todo esto funciona bienDjango- cookies de sesión y sitios en puertos múltiples

... 
server { 
    listen 81; 
    server_name my.ip.x.x; 
    ... #static hosting and reverse proxy to site1 
} 
server { 
    listen 84; 
    server_name my.ip.x.x; 
    ... #static hosting and reverse proxy to site2 
} 
... 

me encontré con un problema cuando yo tenía 2 proyectos diferentes abiertos en 2 pestañas y me di cuenta de que no podía haber iniciado sesión en ambos sitios a la vez (ambos utilizan el modelo de usuario incorporada en Django y autenticación). Al inspeccionar las cookies guardadas en mi navegador, me di cuenta de que la cookie está ligada solo al nombre de dominio (en mi caso solo una dirección IP) y no incluye el puerto.

En el segundo sitio, he intentado cambiar SESSION_COOKIE_NAME annd SESSION_COOKIE_DOMAIN, pero no parece estar funcionando y con estos ajustes actuales que ni siquiera se puede iniciar sesión.

SESSION_COOKIE_DOMAIN = 'my.ip.x.x:84' #solution is to leave this as default 
SESSION_COOKIE_NAME = 'site2'   #just using this works 
SESSION_COOKIE_PATH = '/'    #solution is to leave this as default 

#site1 is using all default values for these 

¿Qué necesito para hacer para obtener cookies para ambos sitios trabajando de forma independiente?

Respuesta

15

Simplemente cambie SESSION_COOKIE_NAME. El SESSION_COOKIE_DOMAIN no admite los números de puerto afaik. Entonces son todos iguales para tus aplicaciones.

+0

Eso fue lo primero que probé. Y no estaba funcionando. Pero, por supuesto, después de que lo recomiendes y lo intente de nuevo, funciona ... ¡Gracias! Además, creo que este problema se solucionaría una vez que obtengamos la configuración interna de DNS (todos estos sitios son aplicaciones de uso interno). –

2

Otra solución que no requiere la codificación rígida de diferentes nombres de cookies para cada sitio es escribir un middleware que cambie el nombre de la cookie en función del puerto en el que entró la solicitud.

Here's a simple version (solo unas pocas líneas de código).

Cuestiones relacionadas