## Передача идентификатора сессии

Существуют два метода передачи идентификатора сессии:

- Cookies
- Параметр URL

Модуль сессии поддерживает оба метода. Метод с cookies является оптимальным, но он не всегда доступен. Поэтому PHP предоставляет второй способ, который внедряет идентификатор сессии непосредственно в URL.

PHP умеет преобразовывать ссылки прозрачно. Если `session.use_trans_sid` включена, все относительные URI-адреса будут автоматически содержать идентификатор сессии.

> Замечание:

> Директива arg_separator.output из php.ini позволяет настраивать разделитель аргументов. Для полной совместимости с XHTML следует указывать &amp;.

В качестве альтернативы вы можете использовать константу `SID`, которая устанавливается при запуске сессии. Если клиентское ПО не хранит подходящую сессионную cookie, SID имеет вид `session_name=session_id`. В противном случае содержит пустую строку. Таким образом, вы можете в любом случае внедрять его в URL.

Приведённый ниже пример демонстрирует, как зарегистрировать переменную и как правильно построить ссылку на другую страницу, используя `SID`.

Пример #1 Подсчёт количества посещений конкретного пользователя

    <?php

    session_start();

    if (empty($_SESSION['count'])) {
       $_SESSION['count'] = 1;
    } else {
       $_SESSION['count']++;
    }
    ?>

    <p>
    Здравствуйте, посетитель, вы видели эту страницу <?php echo $_SESSION['count']; ?> раз.
    </p>

    <p>
    <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">Нажмите
    сюда</a>, чтобы продолжить.
    </p>

Функция htmlspecialchars() может использоваться для вывода `SID` с целью предотвращения XSS-атак.

Вывод `SID` способом, показанном выше, не является обязательным, если опция --enable-trans-sid была использована при компиляции PHP.

> Замечание:

> Подразумевается, что неотносительные URL-адреса указывают только на внешние сайты и потому `SID` к ним не добавляется, т.к. это представляло бы угрозу для безопасности, в частности, риск утечки `SID` другому серверу.

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