Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпорки Галиуллин (upd).doc
Скачиваний:
2
Добавлен:
26.04.2019
Размер:
595.46 Кб
Скачать

12. Устранение недостатка протокола http. Создание сеансов на основе сессий и cookie. Механизм работы. Примеры на php.

Сессии (сеансы) в PHP

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

При работе с сессиями различают следующие этапы:

1)---Открытие сессии

открытие сессии заключается в использовании функции session_start, которая вызывается в начале PHP-сценария.

Синтаксис:

session_start();

Эта функция проверяет, существует ли идентификатор сессии, и, если нет, то создает его. Если идентификатор текущей сессии уже существует, то загружаются зарегистрированные переменные сессии.

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

После инициализации сессии появляется возможность сохранять информацию в суперглобальном массиве $_SESSION.

<?php

session_start(); // Инициируем сессию

$_SESSION['name'] = "value";// Помещаем значение в сессию

$arr = array("first", "second", "third");

$_SESSION['arr'] = $arr; // Помещаем массив в сессию

echo "<a href='other.php'>другая страница</a>";

?>

На страницах, где происходит вызов функции session_start(), значения данных переменных можно извлечь из суперглобального массива $_SESSION. В следующем листинге приводится содержимое страницы other.php, где извлекаются данные, ранее помещенные на странице index.php.

<?php

session_start(); // Инициируем сессию

// Выводим содержимое суперглобального массива $_SESSION

echo "<pre>";

print_r($_SESSION);

echo "</pre>";

?>

Результат работы скрипта выглядит следующим образом:

Array

(

[name] => value

[arr] => Array

(

[0] => first

[1] => second

[2] => third

)

)

3)---Закрытие сессии

После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, а затем вызвать функцию unset().

Синтаксис:

unset($_SESSION["username"]);

Пример простой сессии, работающей с 3-мя страницами. При посещении пользователем первой страницы открывается сессия и регистрируется переменная $username. Код реализации:

<?

session_start();

$_SESSION['username'] = "maksim";

echo 'Привет, '.$_SESSION['username']."<br>";

?>

<a href="page2.php">На следующую страницу </a>

Результат работы сценария:

Привет, maksim

На следующую страницу

12[1] После этого, пользователь maksim нажимает на ссылку и попадает на страницу page2.php, код:

<?

session_start();

echo $_SESSION['username'].' , ты пришел на другую страницу этого сайта!';

echo("<br>");

?>

<a href="page3.php">На следующую страницу </a>

При нажатии на ссылку, пользователь попадает на страницу page3.php, при этом происходит разрегистрация сеансовой переменной и уничтожение сессии.

<?

session_start();

unset($_SESSION['username']); // разрегистрировали переменную

echo 'Привет, '.$_SESSION['username'];

/* теперь имя пользователя уже не выводится */

session_destroy(); // разрушаем сессию

?>

После разрегистрации сеансовой переменной значение массива $_SESSION['username'] уже недоступно.

--------------Сookies-----------------

Cookies - это текстовые строки, хранящиеся на стороне клиента, и содержащие пары "имя-значение", с которыми связан URL, по которому браузер определяет, нужно ли посылать cookies на сервер.

Установка cookies

Установка cookies производится с помощью функции setcookie.

Синтаксис:

bool setcookie (string name [, string value [, int expire [, string path

[, string domain [, int secure]]]]])

Эта функция имеет следующие аргументы:

  • name - имя устанавливаемого cookie;

  • value - значение, хранящееся в cookie с именем $name;

  • expire - время в секундах с начала эпохи, по истечение которого текущий cookie становится недействительным;

  • path - путь, по которому доступен cookie;

  • domain - домен, из которого доступен cookie;

  • secure - директива, определяющая, доступен ли cookie не по запросу HTPP. По умолчанию эта директива имеет значение 0, что означает возможность доступа к cookie по обычному запросу HTTP.

Пример приложения с cookies

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

В cookie с именем counter будет храниться число посещений страницы пользователем:

<?

$counter++;

setcookie("counter",$counter);

echo("Вы посетили эту страницу $counter раз");

?>

Установка срока годности cookies

По умолчанию cookies устанавливаются на один сеанс работы с браузером, однако можно задать для них более продолжительный срок существования.

В PHP существуют функции time и mktime для работы с датой и временем, позволяющие переводить текущее время в количество секунд с начала эпохи. Синтаксис:

time();

Усовершенствованным вариантом функции time является функция mktime.

Синтаксис:

int mktime ([int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])

Аргумент is_dst этой функции определяет, попадает ли эта дата в период летнего времени и может принимать следующие значения:

-1 (По умолчанию. Означает, что свойство не задано);

0 (интервал не приходится на период летнего времени);

1 (интервал приходится на период летнего времени).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]