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

Когда создается сеанс django

Я действительно не понимаю, когда создается сеанс, и на какой объект он создается (за каждый IP-адрес, для каждого браузера, за вход в систему). Я вижу в документации, что сеансы по умолчанию создаются для каждого посетителя, но что такое посетитель (браузер или ip)?

4b9b3361

Ответ 1

Это браузер (не IP). Сессия - это в основном данные, хранящиеся на вашем сервере, которые идентифицируются идентификатором сеанса, отправленным в качестве файла cookie в браузер. Браузер отправит файл cookie, содержащий идентификатор сеанса, во все последующие запросы либо до тех пор, пока браузер не будет закрыт, либо не истечет срок действия файла cookie (в зависимости от значения expires, которое отправляется с заголовком файла cookie, который вы можете контролировать из Django с помощью set_expiry).

Сервер также может заканчивать сеансы, игнорируя (неистекший) файл cookie, который отправляет браузер, и требующий запуска нового сеанса.

Существует отличное описание того, как работают сеансы здесь.

Ответ 2

Что такое сеансы HTTP?

Чтобы отобразить веб-страницу, ваш браузер отправляет серверу запрос HTTP, сервер отправляет ответ HTTP. Каждый раз, когда вы нажимаете ссылку на веб-сайте, происходит новая трансакация HTTP, т.е. Это не постоянное соединение со временем (например, телефонный звонок). Ваше общение с веб-сайтом состоит из многих монолитных HTTP-транзакций (десятки или hundre phonecalls, каждый из которых является несколькими словами).

Итак, как сервер может запоминать информацию о пользователе, например, что пользователь вошел в систему (ip-адреса не являются надежными)? При первом посещении веб-сайта сервер создает случайную строку, и в ответе HTTP он просит браузер создать так называемый HTTP файл cookie с этим значением. Файл cookie - это просто имя (cookie) и ценность. Если вы перейдете на простой сайт Django с поддержкой сеанса, сервер попросит ваш браузер установить cookie с именем "sessionid" с таким случайным сгенерированным значением.

Screenshot of FireBug net tab, while making the first request to a Django site. It shows how a HTTP cookie is set.

В последующие моменты, когда ваш браузер выполнит HTTP-запросы в этом домене, он будет содержать файл cookie в HTTP-запросе.

Shows how subsequent requests will include the cookie, that was set in the initial transaction.

Сервер сохраняет эти идентификаторы сеанса (для django по умолчанию используется сохранение в базе данных), и он сохраняет их вместе с так называемыми переменными сеанса. Таким образом, исходя из идентификатора сеанса, отправленного вместе с HTTP-запросом, он может выкопать ранее установленные переменные сеанса, а также изменить или добавить переменные сеанса. Если вы удалите файлы cookie (ctrl + shift + delete в Firefox), вы поймете, что ни один веб-сайт не запоминает вас (Gmail, Facebook, сайты Django и т.д.), И вам нужно снова войти в систему. Большинство браузеров позволят вам отключать куки в целом или на определенных сайтах (по соображениям конфиденциальности), но это означает, что вы не можете войти на эти веб-сайты.

В браузере, за окно, за вкладку, за ip?

Невозможно войти в разные учетные записи GMail в одном браузере, даже не из разных окон. Но можно войти в одну учетную запись в Firefox, а другую - с Chrome. Таким образом, ответ: для каждого браузера. Однако это не всегда так просто. Вы можете использовать разные профили в Firefox, и каждый из них может хранить разные куки файлы и, таким образом, вы можете одновременно входить в разные аккаунты. Также есть плагины Firefox для хранения нескольких сеансов, например. MultiFox.

Сессия зависит от того, какой сеансовый cookie ваш браузер отправляет в нее HTTP-запрос.

Играть вокруг

Чтобы получить полное представление о том, что происходит, я рекомендую установить FireBug и FireCookie плагины для Firefox. Вышеприведенные скриншоты взяты из панели FireBug net. FireCookie предоставит вам обзор того, когда и какие файлы cookie устанавливаются при посещении сайта, и вы сможете регулировать, какие куки файлы разрешены.

Если есть ошибка на стороне сервера, и у вас есть DEBUG = True, тогда сообщение об ошибке Django покажет вам информацию о HTTP-запросе, включая отправленные файлы cookie

enter image description here