теория. Получение значений сессионных переменных
Скачать 23.43 Kb.
|
Сессии Когда вы работаете с приложением, вы открываете его, вносите некоторые изменения, и затем закрываете. Это очень похоже на сессию. Компьютер знает о том, кто вы такой. Знает, когда вы запустили приложение, знает, когда закрыли. Но в Интернет существует одна проблема: web-сервер не знает о том, кто вы или что вы делаете, поскольку протокол HTTP не хранит состояния соединения. Так как HTTP — это клиент-серверный протокол, HTTP сессия состоит из трёх фаз: Клиент устанавливает TCP соединения (или другое соединение, если не используется TCP транспорт). Клиент отправляет запрос и ждёт ответа. Сервер обрабатывает запрос и посылает ответ, в котором содержится код статуса и соответствующие данные. Начиная с версии HTTP/1.1, после третьей фазы соединение не закрывается, так как клиенту позволяется инициировать другой запрос. То есть, вторая и третья фазы могут повторяться. Использование переменных сессии – один из способов хранения информации (в переменных) для использования на разных страницах сайта. Сессия запускается с помощью функции session_start(). Переменные сессии устанавливаются с помощью суперглобального массива $_SESSION. Ниже приведен пример установки сессионных переменных Задание 1. Создайте файл session1.php и поместите в него следующий код: // Start the session session_start(); ?> // Set session variables $_SESSION["favcolor"] = "green"; $_SESSION["favanimal"] = "cat"; echo "Session variables are set."; ?> Необходимо запомнить, что функция session_start() должна вызываться самой первой, до появления HTML-тегов. Получение значений сессионных переменных Задание 2. Создайте файл session2.php и поместите в него следующий код: session_start(); ?> // Echo session variables that were set on previous page echo "Favorite color is " . $_SESSION["favcolor"] . ". "; echo "Favorite animal is " . $_SESSION["favanimal"] . "."; ?> После того, как файл создан, откройте в окне браузера страницу сайта session1.php, затем в новой вкладке откройте файл session2.php (файлы открываются при запущенном сервере denwer!). Другой вариант посмотреть сессионные переменные – вывести их значения на экран (файл session2.php): session_start(); ?> print_r($_SESSION); ?> В примере выше значение переменных сессий выводиться на экран с помощью функции языка PHP – print_r(). Функция позволяет вывести содержимое переменной в удобочитаемом виде. Принцип работы сессий: Большинство сессий создают пользовательский ключ, хранимый на компьютере пользователя, который выглядит следующим образом: 765487cf34ert8dede5a562e4f3a7e12. Когда сессия открывается в новой вкладке браузера, происходит сканирование пользовательского компьютера для поиска ключа пользователя (созданного ранее). Если найдено совпадение, то открывается предыдущая сессия, если совпадений не найдено – стартует новая сессия. Модификация сессионных переменных Чтобы поменять значение сессионной переменной, достаточно присвоить ей новое значение: session_start(); ?> // to change a session variable, just overwrite it $_SESSION["favcolor"] = "yellow"; print_r($_SESSION); ?> Удаление сессионных переменных session_start(); ?> // remove all session variables session_unset(); // destroy the session session_destroy(); ?> Куки Куки часто используются для идентификации пользователя. Куки являются небольшим файлом, внедряемым сервером на компьютер пользователя. Каждый раз, когда компьютер запрашивает страницу с помощью браузера, происходит отправка полученных ранее файлов куки на сервер. С помощью PHP можно можно создавать и получать куки. Создание/получение куки Пример ниже создает куки с именем “user” со значением “John Doe”. Куки имеют срок жизни 30 дней (86400*30). Указание “/” говорит о том, что куки могут быть использованы на любой странице сайта. $cookie_name = "user"; $cookie_value = "John Doe"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day ?> if(!isset($_COOKIE[$cookie_name])) { echo "Cookie named '" . $cookie_name . "' is not set!"; } else { echo "Cookie '" . $cookie_name . "' is set! "; echo "Value is: " . $_COOKIE[$cookie_name]; } ?> Необходимо запомнить, что функция setcookie() должна вызываться до появления HTML-тегов. Важно: Работа с куки осуществляется в 2 эатапа При создании куки сперва отправляются на компьютер пользователя (этап 1). Использование ранее установленных куки осуществляется при повторном запросе страницы из браузера (этап 2). В связи с этим, пример, приведенный выше при первом запуске выдаст сообщение о том, что куки не установлены. При обновлении страницы будут выведены данные куки. Изменение значений куки Для изменения значения установленных ранее куки достаточно повторно вызвать функцию setcookie(). $cookie_name = "user"; $cookie_value = "Alex Porter"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); ?> if(!isset($_COOKIE[$cookie_name])) { echo "Cookie named '" . $cookie_name . "' is not set!"; } else { echo "Cookie '" . $cookie_name . "' is set! "; echo "Value is: " . $_COOKIE[$cookie_name]; } ?> Удаление куки Для удаления куки необходимо вызвать функцию setcookie() с временем жизни куки в прошлом: // set the expiration date to one hour ago setcookie("user", "", time() - 3600); ?> echo "Cookie 'user' is deleted."; ?> Проверка наличия куки Следующий пример создает небольшой скрит, который проверяет наличие куки. Сперва создается тестовое куки с помощью функции setcookie(), затем подсчитывается количество членов массива $_COOKIE. Необходимость в такой проверке заключается в том, что в браузерах можно отключить использование куки. setcookie("test_cookie", "test", time() + 3600, '/'); ?> if(count($_COOKIE) > 0) { echo "Cookies are enabled."; } else { echo "Cookies are disabled."; } ?> Применение Сессии и куки могут применяться для идентификации авторизованных на сайте пользователей. Причем использование куки, в отличие от сессий, позволяет хранить данные о пользователе на компьютере пользователя в течение длительного периода времени. Алгоритм идентификации и авторизации пользователя на сервере может иметь следующий вид: 1. Пользователь входит на сайт и вводит учетные данные (логин, пароль) в поля формы для отправки. 2. Сервер проверяет наличие пользователя в списке зарегистрированных пользователей. Если пользователь с учетными данными существует в списке – заполняется сессионная переменная, или создаются файлы куки с учетными данными пользователя и пользователю предоставляется доступ к скрытым разделам сайта. Если пользователь отсутствует в списке разрешенных – доступ к сайту запрещен. Задание 1 1. Создать страницу index.php для авторизации пользователя на сайте, отправляющую учетные данные пользователя на сервер (код авторизации находится на той же странице). Для идентификации авторизованного пользователя использовать переменные сессии. 2. При успешной авторизации пользователь остается на странице index.php, на которой имеются ссылки на ранее созданные страницы (личная страница пользователя, калькулятор, расписание), а также ссылка на страницу выхода с сайта. 3. Переход на страницу выхода приводит к стиранию переменных сессии и перенаправлению пользователя на стартовую страницу index.php. 4. Если пользователь не авторизован на сайте, доступ к другим страницам (калькулятор, расписание и т.п.) запрещен – пользователя перенаправляется на стартовую страницу сайта. Для перенаправления пользователя на другую страницу следует использовать функцию header со следующими параметрами: header( "refresh:5;url=index.php" ); Функция отправляет HTTP заголовок web-браузеру, чтобы через 5 секунд тот перешел на страницу по url, указанному в заголовке. Задание 2 Выполнить предыдущее задание с использованием файлов куки. Задание 3 Создать 2 страницы index.php и settings.php. На страницы settings.php пользователь может выбрать тему оформления (цвет фона) страницы index.php. Выбор осуществляется с использованием формы и кнопок типа radio. При нажатии на кнопку sibmit пользователь отправляется на страницу index.php. Стиль оформления страницы (цвет фона) определяется ранее установленными параметрами. В качестве цвета фона предлагается использовать цвета красный, синий, зелены. В случае, если пользователь вышел с сайта (закрыл окно браузера), а затем повторно зашел – цветовая тема загружается в соответствии с ранее выбранной. Цветовую тему рекомендуется хранить на компьютере пользователя в фалйах куки. |