Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

31.2. Работа с сессиями в PHP

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

Warning: open(/var/state/php/sess_6f71dldbb52fa88481e752af7f384db0, O_RDWR) failed: No such file or directory (2),

это значит, что ваш РHP настроен неправильно. Эта проблема решается следующим образом: нужно записать правильный путь (на существующую директорию), в которой будут храниться сессии, в файле php.ini и перезапустить сервер.

Любой скрипт, который будет использовать переменные (данные) из сессий, должен содержать следующую строку:

session_start();

Эгакомандаговоритсерверу, что данная страницануждается во всехпеременных, которые связаны с пользователем (браузером). Сервер берет эти переменные из файла либо из БД и делает их доступными. Очень важно открыть сессию до того, как какие-либо данные будут посылаться пользователю. На практике это значит, что функцию session_start() желательно вызывать в самом начале страницы, например так:

<?php

session_start();

?>

<html>

<head>

</head>

...


ВНИМАНИЕ

Если в сессии хранится объект некоторого класса, то описание класса должно быть раньше старта сессии.


После начала сессии можно задавать глобальные переменные. Это элементарно: вызывается функция session_register('var_name'); и переменная $var_name становится доступной на всех страницах, использующих сессию. Модифицируем примеры 31.1 и 31.2.

Пример 31.3. Сессии в РНР. Файл index.php

<?php

// открываем сессию

session_start();

// задаем значение переменной

$а = "Меня задали на index.php";

// регистрируем переменную с открытой сессией

// внимание: названия переменных передаются функции

// session_register() без знака $

session_register("а");

?>

<html>

<body>

Все ОК. Сессию загрузили!

Пройдем, посмотрим, что <а href="page1.php>там...</a>

</body>

</html>

Пример 31.4. Сессии в РНР. Файл page1.php

<?php

// открываем сессию

session_start();

?>

<html>

<body>

<?php

echo $a;

?>

</body>

</html>

При последовательном запуске этих файлов первый скрипт (index.php) выдаст следующий результат:

Все ОК. Сессию загрузили! Пройдем, посмотрим что там... А второй (page1.php) вот это:

Меня задали на index.php

Таким образом, переменная $а теперь доступна на всех страницах данного сайта, на которых запущены сессии.

Другие полезные функции для работы с сессиями:

session_unregister (string) — сессия удаляет значение заданной глобальной переменной;

session_destroy (string) — сессия уничтожается (например, если пользователь покинул систему, нажав кнопку «Выход»);

session_set_cookie_params (int lifetime [, string path [, string domain] ]) — с помощью этой функции можно установить, как долго будет «жить» сессия, задав unix_timestamp определяющий время «смерти» сессии. По умолчанию сессия существует до тех пор, пока клиент не закроет окно браузера.

<< Предыдущий параграф Следующий параграф >>
Оглавление