Лабораторная работа №7 - Cookies и сессии PHP

Теоретический материал

Работа с cookies (печеньками)

Cookie – это текстовые строки, которое могут быть сохранены на компьютере клиента и затем передаются веб-серверу при каждом обращении к нему. Например, при авторизации на сайте и установки галочки «запомнить меня», вас запоминают в куках браузера. При повторном добавлении комментария, такие параметры как имя, электронный адрес уже введены – это тоже работа cookies.

Управляет куками удаленный сервер, то есть он может их читать, изменять, добавлять. Для хранения используется компьютер пользователя. Запрашивая страницу, браузер отправляет веб-серверу короткий текст с HTTP-запросом. Например, для доступа к странице http://www.example.org/index.html, браузер отправляет на сервер www.example.org следующий запрос:

GET /index.html HTTP/1.1

Host: www.example.org

Сервер отвечает, отправляя запрашиваемую страницу вместе с текстом, содержащим HTTP-ответ. Там может содержаться указание браузеру сохранить куки:

HTTP/1.1 200 OK

Content-type: text/html

Set-Cookie: name=value

(содержимое страницы)

Строка Set-cookie отправляется лишь тогда, когда сервер желает, чтобы браузер сохранил куки. В этом случае, если куки поддерживаются браузерами их приём включён, браузер запоминает строку name=value (имя = значение) и отправляет её обратно серверу с каждым последующим запросом. Например, при запросе страницы http://www.example.org/spec.html браузер пошлёт серверу www.example.org следующий

запрос:

GET /spec.html HTTP/1.1

Host: www.example.org

Cookie: name=value

Accept: */*

Этот запрос отличается от первого запроса тем, что содержит строку, которую сервер отправил браузеру ранее. Таким образом, сервер узнает, что этот запрос связан с

предыдущим. Сервер отвечает, отправляя запрашиваемую страницу и, возможно, добавив

новые куки.

Для установки значения cookie в PHP используется функция setcookie:

bool setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

Параметры функции:

· name – имя куки (только латинские буквы, цифры, символ подчеркивания и дефис)

· value – значение куки

· expire – срок действия куки. Если задан, то кука удаляется по истечению этого строка, в противном случае – после закрытия окна браузера. Указывается в формате timestamp. Timespamp - это число секунд, прошедших с 00:00:00 1 января, 1970 года.

· path – путь, который определяет, в какой части домена может использоваться данный файл (/ - означает доступность в пределах всего домена).

· domain – домен, для которого доступен cookie

· secure - указание, что данные cookie должны передаваться только через безопасное соединение HTTPS.

Cookie – часть заголовка HTTP-запроса, который отправляется браузеру, поэтому их значения должны быть установлены до начала формирования HTML-кода, это означает, что вызов setcookie должен быть расположен до любых HTML-тегов и до любого оператора echo.

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

Для получения доступа к cookie используется суперглобальный массив $_COOKIE.

Перед использованием cookie рекомендуется удостовериться в ее существовании с использованием функции isset.

Пример: массивы и cookie:

Для удаления куки необходимо вызвать функцию setcookie с пустым параметром value. Поскольку куки удаляется браузером, для их гарантированного удаления рекомендуется задавать истекший период действия куки.

Работа с сессиями

Когда пользователь в рамках одного приложения работает с различными страницами, при каждой загрузке скрипта переменные очищаются. Представьте интернет-магазин. Пользователь выбирает товар, кладет его в корзину, а затем оплачивает. Для оформления покупки нужно посетить несколько страниц. Причем сайт должен понимать, что это один и тот же пользователь, а также запоминать товары, которые он отложил в корзину. Для решения таких задач в PHP реализован механизм поддержки сессий.

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

Если есть необходимость запомнить состояние сеанса, все, что нужно сделать – вызвать в начале скрипта функцию session_start(). Данные сеанса содержаться в суперглобальном массиве $_SESSION. Например, необходимо сохранить значение выбранного пользователем цвета:

Прочитать значение цвета:

Команду session_start() нужно вызывать во всех скриптах, в которых предстоит использовать переменные сессии, причем до вывода каких-либо данных в браузер.

Получить идентификатор сессии (строка в 32 символа) можно с помощью функции session_id. Идентификатор генерируется, когда пользователь заходит на сайт и уничтожается, когда пользователь уходит с сайта.

Для удаления данных сессий используется функция unset (для уничтожения заданных переменных) иsession_destroy (удаление текущей сессии целиком).

Наши рекомендации