session_start
(PHP 4, PHP 5, PHP 7, PHP 8)
session_start — Начинает или возобновляет сессию
Описание
При вызове функции session_start() или автозапуске сессии
PHP вызовет открытие и чтение обработчиков сохранения сессии. Это будет
встроенный обработчик сохранения по умолчанию, обработчик, который установил
PHP-модуль наподобие SQLite или Memcached, или пользовательский обработчик, который определили
функцией session_set_save_handler().
Callback-функция чтения извлечёт существующие данные сессии, которые PHP хранит
в сериализованном виде, и вернёт сохранённые данные обработчику PHP-сессий, который десериализует и занесёт
данные в суперглобальный массив $_SESSION.
Перед вызовом функции session_start()
вызывают функцию session_name(),
чтобы назвать сессию произвольно.
При включённой опции session.use_trans_sid
функция session_start() зарегистрирует внутренний обработчик вывода
для перезаписи URL-адресов.
Порядок вызова функций играет важную роль для правильного вывода данных при передаче в функцию ob_start()
обработчика вывода сжатых данных ob_gzhandler
или похожей callback-функции.
Например, обработчик ob_gzhandler
требуется
зарегистрировать до начала сессии.
Список параметров
options
-
Параметр принимает ассоциативный массив опций, которые переопределят
текущий набор директив конфигурации сессии.
Префикс session.
в названиях опций указывать не требуется.
Стандартный набор директив конфигурации дополняет
опция read_and_close
. Со значением true
опция
сразу закроет сессию, когда обработчик сохранения сессии прочитает данные, что исключит
ненужную блокировку, когда данные сессии не изменяются.
Возвращаемые значения
Функция возвращает true
, если сессия успешно запустилась, иначе false
.
Примеры
Базовый пример запуска сессии
Пример #1 page1.php
<?php
// page1.php
session_start();
echo 'Добро пожаловать на страницу 1';
$_SESSION['favcolor'] = 'зелёный';
$_SESSION['animal'] = 'кот';
$_SESSION['time'] = time();
// Работает, если получатель принял сессионный блок данных cookie
echo '<br /><a href="page2.php">page 2</a>';
// Или вывод передают вместе с идентификатором сессии, если требуется
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
После просмотра страницы page1.php вторая страница —
page2.php — волшебным образом будет содержать данные сессии.
Справочник по работе с функциями сессий
даёт дополнительную информацию о передаче идентификатора сессии,
включая сведения о том, как работает
константа SID
.
Пример #2 page2.php
<?php
// page2.php
session_start();
echo 'Добро пожаловать на страницу 2<br />';
echo $_SESSION['favcolor']; // зелёный
echo $_SESSION['animal']; // кот
echo date('Y m d H:i:s', $_SESSION['time']);
// В этом месте можно использовать константу SID, как это делал код страницы page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>
Пример передачи опций в функцию session_start()
Пример #3 Переопределение времени жизни cookie
<?php
// Устанавливаем срок действия cookie равным одному дню
session_start([
'cookie_lifetime' => 86400,
]);
?>
Пример #4 Чтение и закрытие сессии
<?php
// Переменные сессии просто считывают и сразу закрывают сессию,
// если известно, что в сессии не требуется ничего изменять,
// чтобы не блокировать файл сессии, который потребуется другим скриптам, а с ним и другие страницы
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
?>
Примечания
Замечание:
Функцию session_start() требуется вызывать перед выводом данных в браузер,
чтобы работать с сессиями на основе блоков данных cookies.
Замечание:
Вызову функции ob_gzhandler()
лучше предпочесть включение опции zlib.output_compression.
Замечание:
Функция отправляет ряд HTTP-заголовков, состав которых зависит от настроек.
Описание функции session_cache_limiter() рассказывает,
как настроить состав заголовков, которые отправит функция.