ScotlandPHP

Passando o ID de sessão

Existem dois métodos para a propagação do id de sessão:

  • Cookies
  • URL parameter

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 o SID para um servidor diferente.

add a note add a note

User Contributed Notes 3 notes

up
27
Anonymous
7 years ago
The first time a page is accessed, PHP doesn't yet know if the browser is accepting cookies or not, so after session_start() is called, SID will be non-empty, and the PHPSESSID gets inserted in all link URLs on that page that are properly using SID.

This has the consequence that if, for example, a search engine bot hits your home page first, all links that it sees on your home page will have the ugly PHPSESSID=... in them.

This appears to be the default behavior. A work-around is to turn on session.use_only_cookies, but then you lose session data for anyone who has their cookies turned off.
up
3
EastWhite at foxmail dot com
1 year ago
The constant SID would always be '' (an empty string) if directive session.use_trans_sid in php ini file is set to 0.
But set session.use_trans_sid to 1 is not effective if director session.use_only_cookies is 1.
try:
session_start(['use_only_cookies'=>0])
or
session_start(['use_only_cookies'=>0,use_trans_sid=1])
up
-19
Anonymous
8 months ago
caution, <? echo('<a href="//example.com">example.com</a>'); ?> will leak your SID
To Top