Отслеживание сеанса работы с сайтом

Задача
Необходимо сохранять информацию о пользователе во время его путешествия по сайту.

Решение
Для этого предназначен модуль сеанса. Функция session_start() инициализирует сеанс, а заведение элемента в глобальном массиве $_SESSION указывает PHP, чтобы он отслеживал соответствующую переменную.

session_start();
$_SESSION['visits']++;
print 'You have visited here '.$_SESSION['visits'].' times.';

Обсуждение
Для того чтобы сеанс начинался автоматически при каждом обращении к сценариям сайта, надо установить опцию session.auto_start в 1 в файле php.ini. При этом отпадает необходимость в вызове функции session_start().

Функции сеанса отслеживают пользователей, посылая им cookies со случайно сгенерированным идентификатором сеанса. Если PHP определяет, что пользователь не принимает cookie с идентификатором сеанса, то он автоматически добавляет идентификатор в URL и формы.1,2

Например, рассмотрим следующий код, который печатает URL:

print 'Take the A Train';

Если сеансы разрешены, но пользователь не принимает cookies, то строка, посылаемая броузеру, может выглядеть примерно так:

Take the A
Train


В этом примере имя сеанса PHPSESSID, а идентификатор сеанса равен 2eb89f3344520d11969a79aea6bd2fdd.


PHP добавляет их к URL, и они вместе передаются следующей странице. Формы модифицируются так, чтобы включить скрытые элементы, которые передают идентификатор сеанса. Перенаправления в заголовках Location автоматически не модифицируются, поэтому необходимо добавить к ним идентификатор сеанса с помощью константы SID:

$redirect_url = 'http://www.example.com/airplane.php';
if (defined('SID') && (! isset($_COOKIE[session_name()]))) {
$redirect_url .= '?' . SID;
}
header("Location: $redirect_url");

Функция session_name() возвращает имя cookie, в котором хранится идентификатор сеанса, поэтому данный код добавляет константу SID к переменной $redirect_url, только если константа определена, а cookie сеанса не установлен.

По умолчанию PHP хранит данные сеанса в файлах в каталоге /tmp на сервере. Каждый сеанс хранится в своем собственном файле. Для того чтобы изменить каталог, в который записываются файлы, установите значение конфигурационной опции session.save_path в файле php.ini, соответствующее новому каталогу. Для изменения каталогов можно также вызвать функцию session_save_path() с новым каталогом, но это надо делать перед обращением к любой переменной сеанса.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Аутентификация, основанная на cookies
Буферизация вывода в броузер
Взаимодействие в рамках Apache
Идентификация различных броузеров
Настройка обработки ошибок

Вернуться в раздел: PHP / 8. Основы Web