Анонсы:
|
PHP. Урок 14 Данные cookies и сеансыУрок 14. Данные cookies и сеансыВ этом уроке рассматриваются механизмы обмена информацией между страницами Web-сайта без использования форм. Это данные cookies и PHP-сеансы. Файлы CookiesФайлы cookies – это маленькие кусочки информации, которые сохраняются в пользовательском браузере. Обычно в них хранится информация, которая используется для идентификации пользователя. Она позволяет индивидуально настроить Web-сайт под каждого посетителя. Вместо того чтобы каждый раз отправлять данные через форму или как параметр URL, данные cookies автоматически возвращаются в сценарий пользовательским браузером. Даже после окончания работы с сайтом и перехода на другой, эти данные могут храниться до следующего посещения. Например, если реализовать защищенный доступ к Web-сайту, можно хранить имя пользователя в файлах cookies. Это позволит избежать его повторного набора при очередном посещении. Теперь нужно вводить только пароль. На сайтах сообществ можно записывать данные о последнем посещении в файлы cookies. Тогда можно делать так, чтобы все новые сообщения на форуме, с момента последнего посещения, выделялись как новые. Составляющие cookiesПараметр cookie состоит из имени и значения, как обычная переменная PHP. Сервер отправляет инструкцию создать значение cookie браузеру при помощи специального HTTP-заголовка. Это выполняется до отправки содержимого страницы. Встречая такой заголовок, который создает cookie, браузер выполняет соответствующее действие. HTTP-заголовок, который создает cookie, имеет одинаковый вид, независимо от того, какими средствами он генерируется. Это может быть PHP или другой механизм Web-сервера. Создадим заголовок, который создает cookie под названием email: У данных cookies есть определенное время жизни. Некоторые существуют до закрытия окна браузера и хранятся в оперативной памяти компьютера. Другие имеют фиксированное время жизни и теряют актуальность в определенный момент. Они хранятся на жестком диске. Следующий HTTP-заголовок создает cookie email, который заканчивается в конце 2005 года: Eсли не указать атрибут expires в заголовке Set-Cookie, значение cookie автоматически уничтожается при закрытии окна браузера. Кроме того, существуют дополнительные атрибуты — имя домена и путь, куда браузер будет возвращать значение cookies. При повторном посещении страницы, для которой установлены cookies, браузер посылает эти значения обратно на Web-сервер. По умолчанию cookies пересылаются обратно на любую страницу одного и того же домена, с которого они были получены. Если установить значение домена и путь, то cookies посылаются только на заданные поддомены или отдельные страницы сайта. Заголовок ниже создает cookie email. Его значение отправляется на любой поддомен lightwood.net, если запрашивается страница из каталога /scripts: Поддомены. Атрибут cookies domain можно установить либо для домена из которого они отправляются, либо для всех поддоменов домена из которого они отправляются. Для этого нужно использовать формат .ваш_домен.com. Доступ к значениям cookiesСуперглобальный массив $_COOKIE содержит все данные cookies, которые браузер отправляет для сценария. Данные cookies передаются обратно на Web-сервер с помощью HTTP-заголовков. На основе этой информации PHP создает массив $_COOKIE. Получить доступ к значению cookie можно также, как и к данным формы. Например, в следующем выражении выводится текущее значение cookie email: Иногда с данными cookies возникает неразбериха. Тогда можно создать простой сценарий, который покажет все значения на экране. Это позволяет быстро обнаружить проблему. Вот простой пример: Создание cookies с помощью PHPВыше упоминался способ создания данных Cookie с помощью HTTP-заголовков. Но этим способом пользуются мало. Дело в том, что в PHP есть специальная функция, которая выполняет это значительно проще: Здесь не нужно использовать строгий формат даты. Время жизни для cookie можно задать в формате временной метки Unix. Это позволяет установить нужное время жизни на фиксированный отрезок времени или до определенного момента в будущем. Время жизни. Время жизни задает последнюю дату, когда нужно передавать обратно данные cookies. Процесс сравнения происходит на локальном компьютере и зависит от настройки системных часов. Поэтому, если они настроены неправильно, этот процесс становится неконтролируемым. Два следующих параметра используются для того, чтобы задать имя домена и путь для cookies. Иногда нужно установить имя домена и путь, но не задавать время жизни. Для этого нужно установить NULL для третьего аргумента: Последний необязательный аргумент setcookie – это флаг, который устанавливает для браузера безопасный режим передачи данных cookies. Для этого используется зашифрованное SSL-соединение с Web-сервером. На это указывает то, что адрес страницы начинается с https://. Сохранение пароля в файлах cookies. Иногда может возникнуть соблазн сохранять пароль в cookies, чтобы автоматически авторизироваться при очередном посещении. Это небезопасно, даже если установлен флаг secure. Удаление cookiesВ PHP нет функции unsetcookie, которая бы позволяла удалить данные cookies. Но это можно сделать с помощью функции setcookie. Для этого нужно задать пустое значение и время жизни, которое уже прошло. В примере ниже удаляется значение cookie email. Для этого время жизни устанавливается на час назад от текущего момента: Изменение значений cookie. Чтобы удалить или установить новое значение данных cookies, нужно аргументы domain, path и ssl-only оставить такими же, как и при первом создании. СеансыСеансы напоминают cookies, потому что тоже позволяют передавать значения между страницами Web-сайта. Но вместо того, чтобы хранить все значения на каждом Web-браузере, Web-сервер хранит все данные у себя. Браузер получает только одно значение cookie для идентификации. По этому идентификатору PHP определяет, какие значения относятся к данному пользователю. Так как браузер и Web-сервер обмениваются только одним значением, сеансы более эффективны, чем cookies, для хранения больших массивов данных. Открытие сеансаДля того чтобы инициализировать новый сеанс в PHP-сценарии, используется функция session_start. Можно так же задать необязательный аргумент название сеанса, но обычно это не используется. Все сценарии на сайте, с которого открывается сеанс, имеют доступ к одинаковому набору переменных сеанса. Вызов функции session_start создает новый сеанс: Суперглобальный массив $_SESSION хранит все значения переменных сеанса. В отличие от других суперглобальных массивов, которые рассматривались выше, $_SESSION позволяет напрямую присвоить значение. После этого оно становится доступным во всех сценариях, которые используют этот сеанс. Рассмотрим сценарий в листинге 14.1, где устанавливаются две переменные сеанса — счетчик посещений страницы и дата последнего визита в формате временной метки.
Каждый раз при загрузке страницы показываются новые установленные значения. Даже если зайти на другие сайты, а потом вернуться, эти значения сохраняются. Но если закрыть окно браузера и после этого снова зайти, значения сбрасываются. Использование переменных сеансаПеременные сеанса, в отличие от данных cookies, позволяют использовать данные различных типов PHP. Данные cookies всегда хранятся в текстовом виде, а переменные сеанса могут принимать любые значения, которые можно установить для обычной переменной PHP. Например, чтобы хранить список значений в файлах cookies, нужно создать массив и передать его функции serialize. А в переменных сеанса можно просто создать массив и хранить эти данные в сеансе. В листинге 14.2 используется массив для хранения значений, полученных из формы. Это довольно тривиальный пример, но он наглядно демонстрирует гибкость применения переменных сеанса. Листинг 14.2. Использование массива в переменных сеанса
РезюмеВ этом уроке вы узнали, как установить значения cookies из PHP для хранения значений. В следующем уроке вы узнаете, как создать систему аутентификации пользователя на основе этих механизмов. |
Погода в Рудне на 13 Окт 2024 г. 704 - Вьетнамских донгов - 1 |