(PHP 4, PHP 5, PHP 7, PHP 8)
session_start — Начинает или возобновляет сессию
Функция session_start() создаёт новую сессию, или возобновляет текущую сессию на основе идентификатора сессии, который передали через GET- или POST-запрос или в блоке данных cookie.
При вызове функции 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
опция
сразу закроет сессию, когда обработчик сохранения сессии прочитает данные, что исключит
ненужную блокировку, когда данные сессии не изменяются.
Версия | Описание |
---|---|
7.1.0 |
Теперь функция session_start() возвращает false и больше
не инициализирует суперглобальный массив $_SESSION, когда не смогла запустить сессию.
|
Пример #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>';
?>
Пример #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() рассказывает, как настроить состав заголовков, которые отправит функция.