Подтвердить что ты не робот

Совместное использование сеансов django для определенных поддоменов

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

Настройка SESSION_COOKIE_DOMAIN на .example.com не является тем, что я хочу, потому что у меня есть много и много других поддоменов с приложениями django, которые я бы НЕ хотел иметь доступ к сеансу.

В настоящее время мое единственное возможное обходное решение включает сложные переадресации, которые я бы хотел избежать, если это необходимо.

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

4b9b3361

Ответ 1

Решение состоит в том, чтобы установить

SESSION_COOKIE_DOMAIN = '.example.com'

и переименуйте имя файла cookie сеанса, например

SESSION_COOKIE_NAME = 'examplesessionid'

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

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

Ответ 2

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

В тех случаях, когда было рекомендовано иметь отдельные сеансы, но одноразовый с использованием django-cas (вы только подключаетесь к одному из сайтов).

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

SESSION_COOKIE_DOMAIN = ".example.com"

SESSION_COOKIE_NAME = "anycookiename"

SECRET_KEY="anykey" 

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

Ответ 6

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

# let 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 для всех поддоменов из доменов/доменов sudomain.