Джанго (Python) проблема с сессионным - PullRequest
5 голосов
/ 29 декабря 2010

У меня проблема с sessionid: request.session.session_key Генерирует ключ при каждом обновлении страницы / отправке формы.

Хотя это: request.COOKIES[settings.SESSION_COOKIE_NAME] жалуется, что ключ 'sessionid' не найден.

Я что-то упустил? Мне нужен "ключ", который сохраняется при запросах страниц на моем сайте. Мне нужно, чтобы он сохранялся, даже когда браузер закрыт / 3 недели и т. Д. Как бы я это сделал, это Django?

Нужно ли что-то настраивать? Если я что-то неправильно понимаю относительно идентификатора сеанса и его генерации, исправьте меня.

Спасибо за ваши ответы.

С уважением, W

Мой файл settings.py: http://pastebin.com/G9qnD9En

Ответы [ 2 ]

9 голосов
/ 29 декабря 2010

Похоже, ваш браузер не принимает сессионные куки, которые отправляет Django.

Ваш браузер должен иметь возможность сообщать вам, какие куки устанавливаются с помощью отклика страницы из вашего приложения.Убедитесь, что cookie-файл «sessionid» на самом деле отправляется и что домен и путь указаны правильно.

Если в вашем файле settings.py неправильно установлены SESSION_COOKIE_DOMAIN или SESSION_COOKIE_PATH, они могутбыть причиной того, что Django устанавливает в браузере файлы cookie, которые не возвращаются на сервер.

Если вы хотите проверить все настройки, начните с чтения: http://docs.djangoproject.com/en/1.2/topics/http/sessions/

В двух словахвам необходимо:

  • иметь 'django.contrib.sessions' в вашем INSTALLED_APPS;
  • иметь 'django.contrib.sessions.middleware.SessionMiddleware' в MIDDLEWARE_CLASSES
  • на производственном сервере, вам может потребоваться установить SESSION_COOKIE_DOMAIN и SESSION_COOKIE_PATH для хорошего взаимодействия с другими веб-приложениями в том же домене или связанных доменах.

Редактировать:

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

  1. SESSION_COOKIE_DOMAIN установлен на «mydomain.com»

    Для файла cookie для общего TLD требуется , чтобы часть «домен» содержала как минимум два периода (».разделители в нем.Это мешает людям устанавливать куки для доменов, таких как ".com".(Я полагаю, что для файлов cookie для доменов, находящихся под юрисдикцией страны, требуется три периода.)

    Измените это на ".mydomain.com", и браузер должен его вернуть.

    В разработке (запущенной на вашем локальном компьютере, на 127.0.0.1), оставьте этот параметр пустым, иначе ваш браузер вообще не примет cookie.

  2. SESSION_COOKIE_PATH установлен в "/ tmp"

    Это выглядит как ошибка, если ваше веб-приложение не размещено по адресу "http://mydomain.com/tmp/"

    SESSION_COOKIE_PATH используется для указания компонента" путь "cookie, то есть префикс URL-адреса, под которым cookie-файл будет возвращен на сервер. Это позволяет разместить одно приложение на «mydomain.com/firstapp/», а другое - на «mydomain.com/secondapp/», и вы можетеубедитесь, что файлы cookie "sessionid" не будут перепутаны между ними.

    Если у вас есть только одно приложение, размещенное под этим доменным именем, оставьте это поле пустым, и по умолчанию оно будет иметь значение "/" (весь домен)

    Чтобы контролировать, где Django хранит sesЕсли вы храните данные в вашей файловой системе (как вы, похоже, пытаетесь это сделать), вы можете использовать настройку SESSION_FILE_PATH.По умолчанию он все равно установлен на «/ tmp /», поэтому вам вообще не нужно его устанавливать.

2 голосов
/ 05 октября 2012

У меня была похожая проблема, и я исправил ее, установив для SESSION_COOKIE_NAME значение, отличное от значения по умолчанию 'sessionid'. Я думаю, что аналитика Google могла как-то засорять куки.

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