session_start

(PHP 4, PHP 5, PHP 7)

session_startСтартует новую сессию, либо возобновляет существующую

Описание

bool session_start ([ array $options = array() ] )

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