Информационные технологии язык программирования Java

Плотность потока энергии http://aleksandradudnik.ru/ Учебник Outlook http://rembran.ru/


1. ВВЕДЕНИЕ В JAVA

2. ПЕРВОЕ ПРИЛОЖЕНИЕ

3. ПЕРВЫЙ АПЛЕТ

4. РИСОВАНИЕ В ОКНЕ АПЛЕТА

5. СОБЫТИЯ

6. КОМПОНЕНТЫ

7. РАБОТА С СИСТЕМОЙ LAYOUT MANAGER

8. РАБОТА С ПАНЕЛЯМИ

9. ОКНА И ДИАЛОГОВЫЕ ПАНЕЛИ

10. МНОГОПОТОЧНОСТЬ

11. РАБОТА С ФАЙЛАМИ

12. СОЗДАНИЕ СЕТЕВЫХ ПРИЛОЖЕНИЙ

13. РАСТРОВЫЕ ИЗОБРАЖЕНИЯ И АНИМАЦИЯ

14. ЗВУК В АПЛЕТАХ JAVA

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

Создание сессии

Первое, что нужно сделать для работы с сессиями (если они уже настроены администратором сервера), это запустить механизм сессий. Если в настройках сервера переменная session.auto_start установлена в значение "0" (если session.auto_start=1, то сессии запускаются автоматически), то любой скрипт, в котором нужно использовать данные сессии, должен начинаться с команды

session_start();

Получив такую команду, сервер создает новую сессию или восстанавливает текущую, основываясь на идентификаторе сессии, переданном по запросу. Как это делается? Интерпретатор 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. Создание сессии (html, txt)

Если проделать то же самое с файлом authorize.php, то значения выводимых переменных (id сессии и ее имя) будут такими же, если перейти на него с index.php и не закрывать перед этим окно браузера (тогда идентификатор сессии изменится).

Регистрация переменных сессии

Однако от самих идентификатора и имени сессии нам пользы для решения наших задач немного. Мы же хотим передавать и сохранять в течение сессии наши собственные переменные (например, логин и пароль). Для того чтобы этого добиться, нужно просто зарегистрировать свои переменные:

session_register(имя_переменной1,

 имя_переменной2, ...);

Заметим, что регистрируются не значения, а имена переменных. Зарегистрировать переменную достаточно один раз на любой странице, где используются сессии. Имена переменных передаются функции session_register() без знака $. Все зарегистрированные таким образом переменные становятся глобальными (т.е. доступными с любой страницы) в течение данной сессии работы с сайтом.

Зарегистрировать переменную также можно, просто записав ее значение в ассоциативный массив $_SESSION, т.е. написав

$_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 (html, txt)

Теперь, попав на страничку 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 (html, txt)

То мы получим в браузере на секретной странице следующее:

Array ( [login] => pit [passwd] => 123 )

Здесь я хочу делиться секретами

с другом Петей.

В итоге получим.список переменных, зарегистрированных на 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 (html, txt)

Удаление переменных сессии

Кроме умения регистрировать переменные сессии (т.е. делать их глобальными на протяжении всего сеанса работы), полезно также уметь удалять такие переменные и сессию в целом.

Функция session_unregister(имя_переменной) удаляет глобальную переменную из текущей сессии (т.е. удаляет ее из списка зарегистрированных переменных). Если регистрация производилась с помощью $_SESSION ($HTTP_SESSION_VARS для версии PHP 4.0.6 и более ранних), то используют языковую конструкцию unset(). Она не возвращает никакого значения, а просто уничтожает указанные переменные.

Где это может пригодиться? Например, для уничтожения данных о посетителе (в частности, логина и пароля) после его ухода с секретной странички. Если правильные логин и пароль сохранятся и окно браузера после посещения сайта не закрыли, то любой другой пользователь этого компьютера сможет прочитать закрытую информацию.

Пример 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 (html, txt)

В 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 (html, txt)

Теперь, чтобы попасть на секретную страницу, нужно будет опять вводить логин и пароль.

Для того чтобы сбросить значения всех переменных сессии, можно использовать функцию 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. Уничтожение сессии и глобальных переменных (html, txt)

В результате работы этого скрипта будут выведены три строки: в первой - массив с элементом test и его значением, а также идентификатор сессии, во второй - пустой массив и идентификатор сессии, в третьей - пустой массив. Таким образом, видно, что после уничтожения сессии уничтожается и ее идентификатор, и мы больше не можем ни регистрировать переменные, ни вообще производить какие-либо действия с сессией.

Высшая математика Лекции, конспекты, курсовые, примеры решения задач