session_start
(PHP 4, PHP 5, PHP 7)
session_start — Стартует новую сессию, либо возобновляет существующую
Описание
$options
= []
) : boolФункция 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.1.0 |
session_start() теперь возвращает false и больше не
инициализирует $_SESSION, когда она не смогла запустить сессию.
|
Примеры
Простой пример сессии
Пример #1 page1.php
<?php
// page1.php
session_start();
echo 'Добро пожаловать на страницу 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 'Добро пожаловать на страницу 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>';
?>
Передача опций в session_start()
Пример #3 Переопределение времени жизни cookie
<?php
// Устанавливаем срок действия cookie одному дню.
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() для управления этими заголовками.
Смотрите также
- $_SESSION
- Директива конфигурации session.auto_start
- session_id() - Получает и/или устанавливает идентификатор текущей сессии