Propagar o identificador de sessão de PHP por cookies ou URL

O identificador da sessão aberta se pode propagar em uma cookie ou como parâmetro na URL. Vemos as diferenças e como configurar PHP para cada caso.
Publicado em: 15/8/08

Valorize este artigo:
Para salvar na sessão informações independentes para cada usuário, PHP deve identificar a sessão de cada cliente que se conecta à página. Ao entrar um novo usuário na página, PHP gera um identificador de sessão que é único e que será sempre o mesmo durante toda sua visita à página. As variáveis de sessão são armazenadas por PHP internamente, associadas ao identificador da sessão e deve se assegurar que cada cliente poda memorizar o identificador de sessão durante toda sua visita.

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.



Informe de Miguel Angel Alvarez - Tradução de JML



Usuários :    login / registro
Manuais relacionados
Categorias relacionadas

Home | Sobre nós | Copyright | Anuncie | Entrar em contato