Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мова РНР.Питання до заліку.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Сохранение на клиентской стороне[править | править вики-текст]

Некоторые веб-браузеры позволяют странице сохранять информацию локально для последующего извлечения. Internet Explorer, например, поддерживает сохранение информации в истории, избранном, XML-хранилище, или позволяет провести прямое сохранение веб-страницы на диск.[32]

Немного отличный механизм используется в браузерах, кэширующих файлы javascript, используемые в веб-странице. Например, страница может содержать ссылку <script type="text/javascript" src="example.js">. С загрузкой страницы загружается и example.js. Затем скрипт кэшируется и не требует загрузки при повторном посещении страницы. В результате, если скрипт содержит такое значение, как id=3243242, этот идентификатор остаётся в силе и может быть использован другим сценарием javascript или другой страницей, запрашивающей этот скрипт.

Куки и сессии 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". Адрес такого вида должен являться для пользователя сверхсекретным, ибо содержит информацию, которая идентифицирует данного пользователя на сервере.