Совместное использование сеансов django для определенных поддоменов
У меня есть example.com и support.example.com. Если пользователь вошел в систему на основном сайте, я хотел бы, чтобы сеанс был доступен с сайта поддержки.
Настройка SESSION_COOKIE_DOMAIN на .example.com не является тем, что я хочу, потому что у меня есть много и много других поддоменов с приложениями django, которые я бы НЕ хотел иметь доступ к сеансу.
В настоящее время мое единственное возможное обходное решение включает сложные переадресации, которые я бы хотел избежать, если это необходимо.
Есть ли способ сделать это?
Ответы
Ответ 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.