Existem dois métodos para a propagação do id de sessão:
O módulo de sessão suporta ambos os métodos. Cookies são melhores, mas como nem sempre eles estão disponíveis, também é oferecido um método alternativo. O segundo método embute o id de sessão diretamente nas URLs.
O PHP é capaz de transformar os links transparentemente. A menos que você esteja usando o PHP 4.2.0 ou posterior, é necessário ativar manualmente ao compilar o PHP. Em ambiente Unix, passe --enable-trans-sid para o configure. Se esta opção de compilação e a opção em tempo de execução session.use_trans_sid estiverem ativadas, URIs relativas serão modificadas para conter o id de sessão automaticamente.
Nota:
O arg_separator.output, diretiva php.ini, permite configurar o separador de argumentos. Para completa conformidade com XHTML, especifique & aqui.
Alternativamente, pode ser usada a constante SID
, a qual é
definida se uma sessão é iniciada. Se o cliente não enviou um cookie de sessão
apropriado, a constante terá o formato session_name=session_id.
Se não, ela será uma string vazia. Dessa forma, ela pode ser colocada
incondicionalmente em URLs.
O exemplo a seguir demonstra como registrar uma variável e
como criar um link corretamente para outra página usando o SID
.
Exemplo #1 Contando o número de acessos de um único usuário
<?php
session_start();
if (empty($_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>
<p>
Olá visitante, você acessou esta página <?php echo $_SESSION['count']; ?> vezes.
</p>
<p>
Para continuar, <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">clique
aqui</a>.
</p>
A função htmlspecialchars() pode ser usada ao mostrar o SID
com o intuito de prevenir ataques relacionados a XSS.
Mostrar o SID
, como mostrado acima, não é necessário se
--enable-trans-sid foi usado para compilar o PHP.
Nota:
Para URLs não-relativas, assume-se que elas apontam para sites externos e por isso não é adicionado o
SID
, já que seria um risco de segurança vazar oSID
para um servidor diferente.