Существуют два метода передачи идентификатора сессии:
Модуль сессии поддерживает оба метода. Метод с cookies является оптимальным, но он не всегда доступен. Поэтому PHP предоставляет второй способ, который внедряет идентификатор сессии непосредственно в URL.
PHP умеет преобразовывать ссылки прозрачно. Если session.use_trans_sid включена, все относительные URI-адреса будут автоматически содержать идентификатор сессии.
Замечание:
Директива arg_separator.output из php.ini позволяет настраивать разделитель аргументов. Для полной совместимости с XHTML следует указывать &.
В качестве альтернативы вы можете использовать константу
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
другому серверу.