Работа с сессиями в PHP
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
Работа с сессиями в PHP
Ключові поняття: session_start(), session_id(), session_name(), Регистрация переменных сессии, Создание сессии, $_SЕSSION, Доступ к переменным сессии, Удаление переменных сессии, session_unregister, unset($_SЕSSION['имя_переменной']), Уничтожение сессии, session_destroy(), Имя сессии, Этапы работы с сессиями.Этапы работы с сессиями
Создание сессииПервое, что нужно сделать для работы с сессиями (если они уже настроены администратором сервера), это запустить механизм сессий. Если в настройках сервера переменная session.auto_start установлена в значение "0" (если session.auto_start=1, то сессии запускаются автоматически), то любой скрипт, в котором нужно использовать данные сессии, должен начинаться с команды Получив такую команду, сервер создает новую сессию или восстанавливает текущую, основываясь на идентификаторе сессии, переданном по запросу. Как это делается? Интерпретатор PHP ищет переменную, в которой хранится идентификатор сессии (по умолчанию это PHPSESSID) сначала в cookies, потом в переменных, переданных с помощью POST- и GET-запросов. Если идентификатор найден, то пользователь считается идентифицированным, производится замена всех URL и выставление cookies. В противном случае пользователь считается новым, для него генерируется новый уникальный идентификатор, затем производится замена URL и выставление cookies. Команду session_start() нужно вызывать во всех скриптах, в которых предстоит использовать переменные сессии, причем до вывода каких-либо данных в браузер. Это связано с тем, что cookies выставляются только до вывода информации на экран. Получить идентификатор текущей сессии можно с помощью функции session_id(). Для наглядности сессии можно задать имя с помощью функции session_name([имя_сессии]). Делать это нужно еще до инициализации сессии. Получить имя текущей сессии можно с помощью этой же функции, вызванной без параметров: session_name(); Имя сессии — это имя параметра, в котором хранится идентификатор сессии. Пример 12.2. Создание сессии Переименуем наш файл index.html, чтобы обрабатывались php-скрипты, например в Index.php, создадим сессию и посмотрим, какой она получит идентификатор и имя. <? session_start(); // создаем новую сессию или // восстанавливаем текущую echo session_id(); // выводим идентификатор сессии ?> <html> <head><title>My home page</title></head> ... // домашняя страничка </html> <? echo session_name(); // выводим имя текущей сессии. // В данном случае это PHPSESSID ?>Пример 12.2. Создание сессии Если проделать то же самое с файлом authorize.php, то значения выводимых переменных (id сессии и ее имя) будут такими же, если перейти на него с index.php и не закрывать перед этим окно браузера (тогда идентификатор сессии изменится). Регистрация переменных сессииОднако от самих идентификатора и имени сессии нам пользы для решения наших задач немного. Мы же хотим передавать и сохранять в течение сессии наши собственные переменные (например, логин и пароль). Для того чтобы этого добиться, нужно просто зарегистрировать свои переменные: Внимание! session_register является устаревшей и в версии PHP 6.0 вообще удалена. Ее использование крайне не желательно. Вместо session_register следует использовать $_SESSION. Заметим, что регистрируются не значения, а имена переменных. Зарегистрировать переменную достаточно один раз на любой странице, где используются сессии. Имена переменных передаются функции session_register() без знака $. Все зарегистрированные таким образом переменные становятся глобальными (т.е. доступными с любой страницы) в течение данной сессии работы с сайтом. Зарегистрировать переменную также можно, просто записав ее значение в ассоциативный массив $_SESSION, т.е. написав В этом массиве хранятся все зарегистрированные (т.е. глобальные) переменные сессии. Доступ к таким переменным осуществляется с помощью массива $_SESSION['имя_переменной'] (или $HTTP_SESSION_VARS['имя_переменной'] для версии PHP 4.0.6 и более ранних). Если же в настройках php включена опция register_globals, то к сессионным переменным можно обращаться еще и как к обычным переменным, например так: $имя_переменной. Если register_globals=off (отключены), то пользоваться session_register() для регистрации переменных переданных методами POST или GET, нельзя, т.е. это просто не работает. И вообще, не рекомендуется одновременно использовать оба метода регистрации переменных, $_SESSION и session_register(). Пример 12.3. Регистрация переменных Зарегистрируем логин и пароль, вводимые пользователем на странице авторизации. <? session_start(); // создаем новую сессию или // восстанавливаем текущую if (!isset($_GET['go'])){ echo "<form> Login: <input type=text name=login> Password: <input type=password name=passwd> <input type=submit name=go value=Go> </form>"; }else { $_SESSION['login']=$_GET['login']; // регистрируем переменную login $_SESSION['passwd']=$_GET['passwd']; // регистрируем переменную passwd // теперь логин и пароль - глобальные // переменные для этой сессии if ($_GET['login']=="pit" && $_GET['passwd']=="123") { Header("Location: secret_info.php"); // перенаправляем на страницу // secret_info.php }else echo "Неверный ввод, попробуйте еще раз<br>"; } print_r($_SESSION); // выводим все переменные сессии ?>Листинг 12.3a. authorize.php Теперь, попав на страничку secret_info.php, да и на любую другую страницу сайта, мы сможем работать с введенными пользователем логином и паролем, которые будут храниться в массиве $_SESSION. Таким образом, если изменить код секретной странички (заметьте, мы переименовали ее в secret_info.php) так: <?php session_start(); // создаем новую сессию или // восстанавливаем текущую print_r($_SESSION); // выводим все переменные сессии ?> <html> <head><title>Secret info</title></head> <body> <p>Здесь я хочу делиться секретами с другом Петей. </body> </html>Листинг 12.3b. secret_info.php То мы получим в браузере на секретной странице следующее: В итоге получим.список переменных, зарегистрированных на authorize.php и, собственно, саму секретную страничку. Что это нам дает? Допустим, хакер хочет прочитать секреты Васи и Пети. И он как-то узнал, как называется секретная страничка (или странички). Тогда он может попытаться просто ввести ее адрес в строке браузера, минуя страницу авторизации (ввода пароля). Чтобы избежать такого проникновения в наши тайны, нужно дописать всего пару строк в код секретных страничек: <?php session_start(); // создаем новую сессию или // восстанавливаем текущую print_r($_SESSION); // выводим все переменные сессии if (!($_SESSION['login']==pit && $_SESSION['passwd']==123)) // проверяем правильность // пароля-логина Header("Location: authorize.php"); // если ошибка, то перенаправляем на // страницу авторизации ?> <html> <head><title>Secret info</title></head> ... // здесь располагается //секретная информация :) </html>Листинг 12.3c. 2-я версия secret_info.php Удаление переменных сессииКроме умения регистрировать переменные сессии (т.е. делать их глобальными на протяжении всего сеанса работы), полезно также уметь удалять такие переменные и сессию в целом. Функция session_unregister(имя_переменной) удаляет глобальную переменную из текущей сессии (т.е. удаляет ее из списка зарегистрированных переменных). Если регистрация производилась с помощью $_SESSION ($HTTP_SESSION_VARS для версии PHP 4.0.6 и более ранних), то используют языковую конструкцию unset(). Она не возвращает никакого значения, а просто уничтожает указанные переменные. Внимание! session_unregister устарела! Следует использовать unset($_SESSION['имя переменной']); Где это может пригодиться? Например, для уничтожения данных о посетителе (в частности, логина и пароля) после его ухода с секретной странички. Если правильные логин и пароль сохранятся и окно браузера после посещения сайта не закрыли, то любой другой пользователь этого компьютера сможет прочитать закрытую информацию. Пример 12.4. Уничтожение переменных сессии В файл secret_info.php добавим строчку для выхода на главную страницу: <?php // ... php код ?> <html> <head><title>Secret info</title></head> ... // здесь располагается // секретная информация :) <a href="index.php">На главную</a> </html>Пример 12.4a. secret_info.php В Index.php уничтожим логин и пароль, введенные ранее: <? session_start(); session_unregister('passwd'); // уничтожаем пароль unset($_SESSION['login']); // уничтожаем логин print_r($_SESSION); // выводим глобальные переменные сессии ?> <html> <head><title>My home page</title></head> ... // домашняя страничка </html>Пример 12.4b. Index.php Теперь, чтобы попасть на секретную страницу, нужно будет опять вводить логин и пароль. Для того чтобы сбросить значения всех переменных сессии, можно использовать функцию session_unset(); Уничтожить текущую сессию целиком можно командой session_destroy(); Она не сбрасывает значения глобальных переменных сессии и не удаляет cookies, а уничтожает все данные, ассоциируемые с текущей сессией. <? session_start(); // инициализируем сессию $test = "Переменная сессии"; $_SESSION['test']= $test; // регистрируем переменную $test. // если register_globals=on, // то можно использовать // session_register('test'); print_r($_SESSION); // выводим все глобальные переменные echo session_id(); // выводим идентификатор сессии echo "<hr>"; session_unset(); // уничтожаем все глобальные // переменные сессии print_r($_SESSION); echo session_id(); echo "<hr>"; session_destroy(); // уничтожаем сессию print_r($_SESSION); echo session_id(); ?>Пример 12.5. Уничтожение сессии и глобальных переменных В результате работы этого скрипта будут выведены три строки: в первой - массив с элементом test и его значением, а также идентификатор сессии, во второй - пустой массив и идентификатор сессии, в третьей - пустой массив. Таким образом, видно, что после уничтожения сессии уничтожается и ее идентификатор, и мы больше не можем ни регистрировать переменные, ни вообще производить какие-либо действия с сессией.
Зверніть увагу на додаткові посиланняЯкщо вас цікавить...Головний розділСторінки, близькі за змістомзагрузка...
|
Теми розділу
Сторінки, близькі за змістом
|
Copyright © 2008—2024 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|