session_start
(PHP 4, PHP 5, PHP 7, PHP 8)
session_start — Начинает или возобновляет сессию
Описание
При вызове функции session_start() или автозапуске сессии
PHP вызовет открытие и чтение обработчиков сохранения сессии. Обработчиком станет
либо встроенный обработчик сохранения по умолчанию, либо обработчик, который установил
PHP-модуль наподобие SQLite или Memcached, или пользовательский обработчик, который определили
функцией session_set_save_handler().
Callback-функция чтения извлечёт данные сессии из хранилища и вернёт сериализованное
представление сохранённых данных обработчику PHP-сессий в формате, который определили в директиве session.serialize_handler.
Обработчик десериализует данные и автоматически заменит ими содержимое суперглобального массива $_SESSION.
Произвольное название сессии устанавливают функцией session_name()
путём вызова перед функции session_start().
При включённой опции 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() рассказывает,
как настроить состав заголовков, которые отправит функция.