Как получить отдельные приложения Django на одном и том же поддомене для совместного использования cookie сессии? - PullRequest
7 голосов
/ 17 февраля 2009

У нас есть пара приложений Django, развернутых на одном поддомене. Несколько опытных пользователей должны переключаться между этими приложениями. Я заметил, что каждый раз, когда они отскакивают между приложениями, их cookie сеанса получает новый идентификатор сеанса от Django.

Я не очень часто использую таблицу сеансов Django, за исключением одного сложного рабочего процесса. Если пользователь прыгает между приложениями, находясь в этом рабочем процессе, он теряет свой сеанс и должен начинать сначала.

Я перерыл сессионный код Django и обнаружил, что:

django.conf.settings.SECRET_KEY

используется для проверки целостности сеансов по каждому запросу. Если проверка целостности не удалась, создается новый сеанс. Понимая это, я изменил секретный ключ в каждом из этих приложений на одно и то же значение, полагая, что это позволит пройти проверку целостности и разрешить им совместно использовать сеансы Django. Тем не менее, это не похоже на работу.

Есть ли способ сделать это? Я что-то упускаю?

Заранее спасибо

Ответы [ 2 ]

15 голосов
/ 17 февраля 2009

Вместо этого я бы посоветовал вам установить SESSION_COOKIE_NAME на разные значения для двух приложений. Первоначально вашим пользователям все равно придется входить в систему дважды, но их сеансы не будут конфликтовать - если они войдут в приложение A, затем в приложение B и вернутся в A, у них все еще будет сеанс A.

Совместное использование сеансов между экземплярами Django, вероятно, не очень хорошая идея. Если вы хотите какую-то единую регистрацию, посмотрите что-то вроде django-cas. У вас все еще будет 2 сеанса (как и должно быть), но пользователь войдет в систему только один раз.

8 голосов
/ 18 марта 2009

Я согласен, что совместное использование сеансов между экземплярами Django, вероятно, не очень хорошая идея. Если бы вы действительно хотели, вы могли бы:

  • убедитесь, что два приложения django используют один и тот же SECRET_KEY
  • убедитесь, что два приложения django используют один и тот же SeSSON_COOKIE_NAME
  • убедитесь, что для SESSION_COOKIE_DOMAIN установлено то, что позволяет двум экземплярам совместно использовать файлы cookie. (Если они действительно используют один и тот же поддомен, ваши текущие настройки, вероятно, подойдут.)
  • убедитесь, что оба экземпляра Django используют один и тот же бэкэнд сеанса (одну и ту же базу данных, одну и ту же директорию файлов, одну и ту же конфигурацию memcached и т. Д.)
  • убедитесь, что все, что помещено в сеанс, имеет смысл в обеих базах данных Django: по крайней мере, это будет включать идентификатор пользователя, поскольку Django auth использует его, чтобы запомнить, какой пользователь вошел в систему.

Все это говорит, что я на самом деле не пробовал все это, так что у вас все еще могут быть проблемы!

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