Django - сеансовые куки и сайты на нескольких портах - PullRequest
12 голосов
/ 15 сентября 2011

У меня есть несколько проектов Django, запущенных на одном сервере с использованием gunicorn и nginx .В настоящее время каждый из них настроен на работу с уникальным портом с тем же IP-адресом, используя директиву server в nginx.Все это прекрасно работает.

...
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
}
...

Я столкнулся с проблемой, когда у меня было открыто 2 разных проекта на 2 вкладках, и я понял, что не могу войти на оба сайта одновременно (оба используют встроенныйМодель Django пользователя и аутентификации).После проверки файлов cookie, сохраненных в моем браузере, я понял, что файл cookie привязан только к имени домена (в моем случае это просто IP-адрес) и не включает порт.

На втором сайте япопытался изменить SESSION_COOKIE_NAME и SESSION_COOKIE_DOMAIN , но он не работает, и с этими текущими настройками я даже не могу войти в систему.

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

Чтомне нужно сделать, чтобы файлы cookie для обоих сайтов работали независимо?

Ответы [ 2 ]

17 голосов
/ 15 сентября 2011

Просто измените SESSION_COOKIE_NAME.SESSION_COOKIE_DOMAIN не поддерживает номера портов afaik.Так что они одинаковы для ваших приложений.

3 голосов
/ 30 июля 2014

Другое решение, которое не требует жесткого кодирования различных имен файлов cookie для каждого сайта, заключается в написании промежуточного программного обеспечения, которое изменяет имя файла cookie в зависимости от порта, на который поступил запрос.

Вот простая версия (всего несколько строк кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...