Необходимость в использовании средств поддержки сеансов



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

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

·Требуется, чтобы в окне браузера пользователя отображались рекламные объявления, но каждое конкретное объявление не должно появляться больше одного раза в течение каждого сеанса.

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

·Необходимо в целом проследить за тем, как пользователи перемещаются по страницам сайта, например, узнать, как они обычно переходят на ту или иную внутреннюю страницу, — ставят на ней закладку или всегда проходят весь путь от начальной страницы?

Использование сеансов

Чтобы начать сеанс, нужно добавить в начало PHP-сценария вызов функции session_start() – лишь после этого появится возможность сохранять и получать данные, принадлежащие сеансу. Функцию session_start() следует вызвать до вызова функции header() и вообще до того, как браузеру клиента будет отправлена хоть какая-нибудь информация, в противном случае сеанс может работать некорректно.

Обращение к переменным сеанса заключается в использовании суперглобальной переменной $_SESSION с подстановкой имени требуемой переменной в квадратных скобках. В примере ниже показан простой счетчик просмотра страницы за один сеанс (для простоты этот пример основан на обновлении одной и той же страницы несколько раз, однако, ни что не ограничивает вас в применении сеансов на нескольких страницах, но не забывайте добавлять на каждую из них вызов метода session_start()):

Исходный код страницы

<?php

session_start();

?>

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<title>Основы PHP</title>

</head>

 

<body>

 

<?php

  

if (!isset($_SESSION['count_view']))

{

   echo '<h1>Вы в первый раз посещаете данную страницу.</h1>';

   $_SESSION['count_view'] = 1;

}

else

{

   ++$_SESSION['count_view'];

   echo '<h1>Количество посещений вами этой страницы за 1 сеанс: '

       .$_SESSION['count_view'].'</h1>';

}

 

?>

 

</body>

</html>

Завершение сеанса

Есть моменты, когда требуется преждевременно завершить сеанс. Например, если вы разместили на странице кнопку или гиперссылку выхода из системы. Выход из системы фактически означает завершение сеанса работы с пользователем. Завершают сеанс с помощью функции session_destroy(). Разумеется, сеанс предварительно должен быть открыт, чтобы было что завершать.

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

Код PHP

<?php

session_start();

 

// Выполнить какие-либо действия в рамках сеанса

$_SESSION['username'] = 'Alex';

 

// Завершить сеанс работы с сайтом

session_destroy();

 

echo "В этот момент мы все еще можем увидеть значение имени пользователя: "

.$_SESSION['username']."<br>";

 

// Уничтожить значение в массиве $_SESSION

unset($_SESSION['username']);

 

if (empty($_SESSION['username']))

{

echo "Теперь переменная \$_SESSION['username'] является пустой";

}

?>

 

При закрытии сеанса его данные удаляются из файлов на стороне сервера. Чтобы удалить переменные сеанса, необходимо присвоить пустой массив суперглобальной переменной $_SESSION.

Сборка мусора

Теперь займемся сборкой мусора – нет, речь не о том, что пора браться за швабру; имеется в виду процедура сборки мусора по завершении сеанса или по истечении предельного времени ожидания.

Сборка мусора (garbage collection) – это то, что должно произойти с содержимым сеанса на стороне сервера после завершения сеанса или по достижении предельного времени отсутствия активности. Если сервер не будет периодически удалять информацию о старых сеансах, она будет накапливаться до бесконечности, занимая дисковое пространство и мешая работе сервера. Сборка мусора производится автоматически, при выполнении этой операции удаляются все данные устаревших сеансов.

В PHP можно регулировать нагрузку на механизм сборки мусора, чтобы не удалять старые файлы сеансов при каждом обращении к сеансу. По умолчанию предельное время жизни файлов сеанса составляет 1440 с, или 24 мин. Для очень надежных сайтов это время не слишком велико, однако в PHP есть ряд параметров, управляющих удалением мусора. Файл сеанса может быть удален по истечении заданного интервала времени, но он может продолжать свое существование на диске сервера и дольше – все зависит от количества созданных сеансов. В файле инициализации PHP (php.ini) отношение к сборке мусора имеют следующие параметры:

·session.gc_maxlifetime (значение по умолчанию 1440);

·session.gc_probability (значение по умолчанию 1);

·session.gc_divisor (значение по умолчанию 100).

В этих переменных символы gc означают garbage collector (сборщик мусора). Если у вас на сервере достаточно дискового пространства, можно увеличить предельное время ожидания, чтобы предотвратить завершение большинства или даже всех сеансов до закрытия браузера. Однако во многих случаях требуется ограничить предельную продолжительность сеанса – этого можно добиться, изменив срок хранения cookie.

Чтобы определить, пора ли запускать сборщик мусора, интерпретатор PHP генерирует случайное число в диапазоне от 0 до 1. Если полученное число меньше, чем дробная часть отношения session.gc_probability / session.gc_divisor, запускается сборщик мусора. Рассмотрим настройку предельного времени продолжительности сеанса подробнее, чтобы вы лучше поняли необходимые действия.


Дата добавления: 2021-04-05; просмотров: 54; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!