(PHP 4, PHP 5, PHP 7)
session_start — Стартует новую сессию, либо возобновляет существующую
$options
= []
] )Функция session_start() создает сессию, либо возобновляет существующую, основываясь на идентификаторе сессии, переданном через GET или POST запрос, либо переданный через cookie.
Когда вызвана функция session_start(), либо сессия стартована автоматически, PHP вызовет открытие и чтение обработчиков записи сессии. Это могут быть как встроенные обработчики, так и предоставляемые расширениями (например SQLite или Memcached); или вообще определенный пользователем обработчик, заданный функцией session_set_save_handler(). Callback-функция чтения извлечет все существующие данные сессии (сохраненные в специальном сериализованном виде), десериализует их и занесет в суперглобальный массив $_SESSION, после чего вернет сохраненные данные обработчику сессий PHP.
Для использования именованных сессий, используйте session_name() перед session_start().
Если разрешена опция session.use_trans_sid, функция session_start() регистрирует внутренний обработчик вывода для перезаписи URL.
Если пользователь использует ob_gzhandler или что-то подобное совместно с функцией ob_start(), порядок функций важен для правильного вывода. К примеру, ob_gzhandler должен быть зарегистрирован до старта сессии.
options
Если задано, то должно быть ассоциативным массивом, переопределяющим текущие директивы конфигурации сессий. Ключи не должны иметь префикса session..
В дополнение к обычному набору конфигурационных директив, может быть
добавлена опция read_and_close. Если установлена в TRUE
, то
сессия будет закрыта сразу же после прочтения, теоретически позволяя избежать
блокировки если данные сессии не должны меняться.
Функция возвращает TRUE
если сессия успешно стартована, и FALSE
если нет.
Версия | Описание |
---|---|
7.0.0 |
Добавлен параметр options .
|
5.3.0 |
если сессия не смогла стартовать, то возвращается FALSE .
Раньше возвращалось TRUE .
|
4.3.3 |
С версии PHP 4.3.3, вызов session_start()
после того, как сессия уже стартована, выдает ошибку
уровня E_NOTICE . А также, повторный
старт сессии будет проигнорирован.
|
Пример #1 page1.php
<?php
// page1.php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_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 'Welcome to page #2<br />';
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);
// Можете тут использовать идентификатор сессии, как в page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>
Пример #3 Переопределение времени жизни cookie
<?php
// Устанавливаем время жизни равным одному дню.
session_start([
'cookie_lifetime' => 86400,
]);
?>
Пример #4 Чтение и закрытие сессии
<?php
// Если мы знаем, что в сессии не надо ничего изменять,
// мы можем просто прочитать ее переменные и сразу закрыть,
// чтобы не блокировать файл сессии, который может понадобиться другим сессиям
session_start([
'cookie_lifetime' => 86400,
'read_and_close' => true,
]);
Замечание:
Для использования сессий на основе cookie, функция session_start() должна быть вызвана перед выводом чего бы то ни было в браузер.
Замечание:
Используйте zlib.output_compression вместо ob_gzhandler()
Замечание:
Эта функция отсылает несколько заголовков HTTP, в зависимости от настроек. Смотри описание функции session_cache_limiter() для управления этими заголовками.