session_start

(PHP 4, PHP 5, PHP 7, PHP 8)

session_startНачинает или возобновляет сессию

Описание

session_start(array $options = []): bool

Функция 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 опция сразу закроет сессию, когда обработчик сохранения сессии прочитает данные, что исключит ненужную блокировку, когда данные сессии не изменяются.

Возвращаемые значения

Функция возвращает true, если сессия успешно запустилась, иначе false.

Список изменений

Версия Описание
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>';

?>

Пример передачи опций в функцию 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() рассказывает, как настроить состав заголовков, которые отправит функция.

Смотрите также

  • $_SESSION
  • Директива конфигурации session.auto_start
  • session_id() - Получает и (или) устанавливает идентификатор текущей сессии