PHP dispõe de um par de métodos para poder propagar o identificador de sessão em cada página que visita o cliente: em uma cookie, ou então a propaga através da URL.
Em uma cookie
É o método mais cômodo e vem configurado por padrão. Nós não temos que fazer nada. PHP se encarrega de salvar a informação da sessão por nós em uma cookie no navegador do usuário. O problema deste método é que não podemos estar seguros que todos os usuários aceitem cookies de sessão em seus navegadores.
Em uma variável passada por parâmetro na URL
Consiste em enviar o identificador em todas as URL como parâmetro, para recolher por método GET. É um pouco mais confuso porque em cada URL aparecerá o parâmetro, algo como isto: pagina.php?PHPSESSID=8af7f938a4ab81aa6406e3d57ea41081
Este método tem também suas vantagens e inconvenientes. Por um lado é mais confiável que as cookies, porque passar o identificador pela URL é possível sempre, independentemente do navegador cliente ou sua configuração. Porém, por outro lado, enviar o PHPSESSID pela URL pode trazer problemas, porque pode tornar público seu identificador de sessão a outras pessoas ou programas ou porque pode se armazenar em favoritos ou no histórico de urls com identificadores de sessão antigos.
Passar o identificador por uma cookie
Na maioria dos casos PHP tentará salvar o identificador de sessão em uma cookie, embora php.ini tenha algumas configurações para alterar este comportamento por padrão.
session.use_cookies nos serve para indicar se queremos que se envie a cookie com o identificador de sessão. Por padrão está ativado com o valor 1.
| Nota: Lembre-se de reiniciar Apache quando fizer alterações em php.ini para que se tornem efetivas. |
Passar o identificador de sessão como parâmetro na URL
Podemos fazer uma prova para ver o que acontece com as variáveis de sessão quando não se dispõe de cookies. Veremos que não se memorizam as variáveis de sessão nas sucessivas páginas. Isto se pode solucionar passando o identificador de sessão pela URL. Em PHP seria algo como isto:
<a href="leer_sesion.php?<?=SID?>">Passo variável de sessão por URL</a>
É cansativo ter que escrever esse dado em cada URL, porém PHP também dispõe de mecanismos para que as URL se escrevam automaticamente com os identificadores de sessão, de maneira transparente para o desenvolvedor. Isto se pode indicar através do arquivo php.ini na variável de configuração session.use_trans_sid.
| Nota: segundo o site de PHP a alteração das URLs automática para propagar o identificador de sessão só se pode fazer se se compilou PHP com a opção --enable-trans-sid. Em minha configuração de PHP sobre Windows sim que me permite usar session.use_trans_sid e se propagam os identificadores de sessão sem que tenha que fazer nada. |
![]() | Mostrar código PHP de um arquivo com cores ressaltadas | Como converter páginas com extensão .PHP à extensão que desejar | ![]() |