Совместное использование сессий Django на определенных поддоменах - PullRequest
21 голосов
/ 18 сентября 2010

У меня есть example.com и support.example.com. Если пользователь вошел в систему на основном сайте, я бы хотел, чтобы сеанс был доступен с сайта поддержки.

Установка SESSION_COOKIE_DOMAIN на «.example.com» - это не то, что я хочу, потому что у меня есть много, много других поддоменов с приложениями django, которым я не хотел бы иметь доступ к сессии.

В настоящее время мой единственный возможный обходной путь связан с хитрыми перенаправлениями, которых я хотел бы избежать при необходимости.

Есть ли способ сделать это?

Ответы [ 6 ]

27 голосов
/ 11 января 2013

Решение было бы установить

SESSION_COOKIE_DOMAIN = '.example.com'

и переименовать имя файла cookie сеанса, например,

SESSION_COOKIE_NAME = 'examplesessionid'

на экземпляре Django, который управляет двумясубдомены.Два сайта будут использовать переименованный файл cookie с глобальной областью действия и не будут мешать другим экземплярам Django, используя файл cookie «sessionid» по умолчанию для своих соответствующих поддоменов.

Обратите внимание, что файл cookie будет отправляется другим экземплярам Django на поддоменах example.com, но не будет интерпретироваться как cookie-файл сеанса Django.

5 голосов
/ 01 октября 2010

Недавно я видел похожий вопрос в: Как получить отдельные приложения Django на одном поддомене для совместного использования cookie сеанса?

Где было рекомендовано иметь отдельные сессии, но с одним знаком-при использовании django-cas (вы входите только на один из сайтов).

2 голосов
/ 03 октября 2010

Вы можете написать собственное программное обеспечение SessionMiddleware для установки и получения файлов cookie на основе доменов.

По сути, вы хотите скопировать существующий класс SessionMiddleware .В функции process_request посмотрите на домен и получите правильный файл cookie для настройки SessionStore.В process_response вы захотите написать куки для обоих поддоменов.В ваших настройках вы удалите существующий класс SessionMiddleware и замените его своим собственным.

Это просто у меня в голове, так что не ненавидите меня, если он не работает.Желаем удачи, и, пожалуйста, опубликуйте свои выводы для будущих читателей.

0 голосов
/ 18 января 2017

У меня есть приложение с несколькими доменами, поэтому решение с изменением чего-либо в settings.py мне не подошло. Поэтому я установил cookie для основного домена следующим образом:

# let's get our domain
arr = request.get_host().split(':')[0].split('.')
# if we are at subdomain page right now
# we should delete subdomain using:
# arr.pop(0)
domain = ".".join(arr)
response.set_cookie('city', 'somevalue, domain="."+domain)

Этот кодовый набор cookie для всех поддоменов со страниц доменов / поддоменов.

0 голосов
/ 28 августа 2014

Следующее значение должно быть одинаковым во всех ваших приложениях django

SESSION_COOKIE_DOMAIN = ".example.com"

SESSION_COOKIE_NAME = "anycookiename"

SECRET_KEY="anykey" 

Если вы используете memcached, установите одинаковое местоположение memcached во всех ваших приложениях django.

0 голосов
/ 04 октября 2010

Я не знаю, django, но возможно ли вам установить 2 куки вместо 1?Видите ли, cookie отправляется только в том случае, если домен cookie соответствует URL-адресу домена?Если вы хотите иметь один и тот же сеанс на 2 разных доменах, вы можете установить 2 куки с одинаковым значением и разные доменыВ этом случае .example.com и support.example.com.Таким образом, вы получите этот cookie только при доступе к одному из них.

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