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

# session_start

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

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

### Описание

function session_start(array `$options` = []): bool

Функция session_start() создаёт новую сессию, или возобновляет текущую сессию на основе идентификатора сессии, который передали через GET- или POST-запрос или в блоке данных cookie.

При вызове функции session_start() или автозапуске сессии PHP вызовет открытие и чтение обработчиков сохранения сессии. Обработчиком станет либо встроенный обработчик сохранения по умолчанию, либо обработчик, который установил PHP-модуль наподобие SQLite или Memcached, или пользовательский обработчик, который определили функцией session_set_save_handler(). Callback-функция чтения извлечёт данные сессии из хранилища и вернёт сериализованное представление сохранённых данных обработчику PHP-сессий в формате, который определили в директиве session.serialize_handler. Обработчик десериализует данные и автоматически заменит ими содержимое суперглобального массива $_SESSION.

Произвольное название сессии устанавливают функцией session_name() путём вызова перед функции session_start().

При включённой опции 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() - Получает и (или) устанавливает идентификатор текущей сессии

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open