Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Куки и сессии HTTP



Куки (cookie) - механизм, работающий через HTTP, позволяющий серверу оставлять на компьютере клиента некоторые данные - "куки". Работает это так:

· Клиент отправляет серверу некоторый запрос.

· Сервер отвечает клиенту, причём в специальном поле заголовка Set-Cookie указывает данные, которые тем самым "просит" браузер клиента запомнить. (см. пример ответа сервера выше).
Данные указываются сервером в виде "имя=значение", причем сервер может попросить клиента сохранить сразу несколько значений под разными именами. Кроме этого, сервер указывает желаемое время жизни куки, в течение которого браузеру следует сохранять куки, а также домен и путь к ресурсу, для которого предназначен куки.

· Браузер, получив от сервера Set-Cookie, решает, так уж ли ему нужно хранить эти данные (браузер сверяется с настройками, сделанными пользователем и с политикой безопасности). Если браузер решил данные сохранить, то он запоминает их в особой базе данных для куки. У каждого браузера своя такая база. Каждый куки имеет время жизни, после которого удаляется из базы браузера. Кроме этого, для каждого куки браузер запоминает, с какого домена этот куки был получен: например если вы зашли на labaka.ru и этот сервер выслал вам куки, то именно домен labaka.ru и будет зафиксирован браузером, как источник данного куки.

· При последующих запросах, отправляемых к данному сайту, браузер будет отправлять все сохранённые куки для этого домена в поле заголовка Cookie. (см. пример запроса).

В браузере можно посмотреть, какие куки оставил нам сервер. Например, в Firefox достаточно зайти на "правый клик - View Page Info - Security - View Cookies":

Благодаря механизму cookie появляется возможность установить "сессию", или "сеанс" между клиентом и сервером. Сессия - это связная "беседа" клиента и сервера между собой. Рассмотрим на примере:

· Вы входите на сайт. Сервер не знает вас, поэтому пишет "Привет, гость". Вы заходите на страницу логина, где вводите свой логин и пароль.

· Сервер, получив от вас правильный логин и пароль, теперь знает, что вас зовут Username. Теперь серверу надо как-то запомнить, что на том конце провода находится Username и все последующие запросы от этого клиента - от Username. Сервер, между тем, знает о механизме куков.

· Сервер формирует набор данных о клиенте, вошедшем на сайт. Это может быть, например, имя клиента и его номер в базе данных сервера. Этому набору данных сервер придумывает некий уникальный идентификатор, который крайне сложно угадать, например "FUG984ylskjghow87AqoX5U". Набор данных под этим идентификатором сервер запоминает у себя в файле, в памяти или в базе данных: там, откуда эти данные можно быстро извлечь, зная идентификатор. Назовём этот набор данных " данными сессии ", а идентификатор - " номером сессии ".

· Номер сессии сервер отправляет клиенту в виде куки, вместе с веб страницей, на которой отображается сообщение об успешном входе на сайт. Какое будет имя куки, решает сервер: например PHPSESSID. Назовём это именем сессии. Это имя, как правило, будет одинаковым для всех входящих на сайт клиентов. Номера сессий, разумеется, у разных клиентов будут постоянно разные, без повторений.

· Браузер запоминает куки с номером сессии и отправляет его обратно серверу с каждым последующим запросом.

· Сервер, получая от клиента номер сессии с каждым запросом, находит у себя данные сессии по этому номеру, благодаря чему знает, что это именно Username ходит по сайту, а не кто-то другой. Соответственно, сервер отображает данные, которые следует видеть этому пользователю.

· Когда пользователь кликает по кнопке "выйти с сайта", сервер удаляет из памяти данные сессии, соответствующей этому пользователю, и выдаёт браузеру заголовок Set-Cookie, указывая вместо номера сессии пустое значение. Это - сигнал браузеру удалить куки из базы. После этого сессия считается разорванной и пользователь снова видит странички "для анонимусов".

Важные моменты о сессиях, которые следует понимать:

· В самом протоколе HTTP нет ни единого упоминания о сессиях: пары "запрос-ответ" HTTP никак не связаны друг с другом. Понятие сессии появляется на более высоком уровне: сессиями управляет веб-приложение, работающее на сервере. HTTP является лишь транспортом для передачи заголовков Set-Cookie/Cookie, а интерпретацией заголовков занимается веб приложение и браузер клиента.

· Данные сессии хранятся на сервере, этих данных может быть так много, как требуется веб-приложению. У клиента хранится только номер сессии. Данные сессии на сервере - это "короткоживущие" данные, актуальные только на время сеанса пользователя. Данные клиента, которые надо запоминать надолго, сервер хранит в базе данных или в файлах.

· Номер сессии является чрезвычайно ценной информацией, ведь зная этот номер, можно "представиться" серверу некоторым пользователем, даже не являясь им. Для этого достаточно каким-либо способом украсть номер сессии (перехватить HTTP-трафик пользователя-жертвы, или, если он не понимает что делает, попросить его сообщить вам свой номер сессии, скопировав его из браузера). Для предотвращения перехвата используется протокол HTTPS, при котором весь трафик между клиентом и сервером надёжно шифруется.

· Номер сессии может передаваться не только через Cookie, но и, в некоторых случаях, через параметры URL вида "http://какой-то-то-сайт.ком/?PHPSESSID=FUG984ylsk". Адрес такого вида должен являться для пользователя сверхсекретным, ибо содержит информацию, которая идентифицирует данного пользователя на сервере.





Дата публикования: 2015-07-22; Прочитано: 429 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...