PHP $_SESSION não funciona como esperado
Pergunta
Tenho um site PHP que estou mantendo e confirmei que funcionou em determinado momento.
Temos um site que utiliza um sistema de login que armazena as informações do usuário logado em um $_SESSION['user']
variável.O site usado para desconectar o usuário ao clicar /logout.php que essencialmente removeu aquela parte da sessão, então header()
redirecionado para a página inicial.
A partir de recentemente, o /logout.php arquivo com session_start()
no topo de alguma forma não vê as informações da sessão quando print_r()
é usado para produzi-lo para fins de depuração.
Se eu for para outra página, vejo as informações da sessão perfeitamente, mas não na página de logout... e é exatamente por isso que não consigo remover as informações da sessão, porque elas não estão acessíveis.
Eu pensei $_SESSION
era global no site até o navegador ser fechado.Isso nunca aconteceu e sei que a instância da sessão foi iniciada nesta página, então é estranho que ela não esteja me mostrando os dados da sessão.
Alguma ideia?Estou totalmente perplexo com isso!
Código:/logout.php
<?
#session_start() is inside this file
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
unset($_SESSION['user']);
header("location: /");
exit();
?>
A verificação de $_SESSION['user']
abrange todo o site e chamo vários itens abaixo dele quando necessário para coisas diferentes.Outra pessoa criou este site e estou tentando depurar por que ele não está funcionando para ela de repente.
Solução
Você está acessando o logout.php do Mesmo exato Domínio que você define a sessão para começar (ou seja, exemplo.com vs. www.example.com/logout.php)
Quanto a apenas desativar dados de sessão específicos, seria melhor ligar session_destroy()
E então desvie seus cookies para matar a sessão.
Outras dicas
Se o domínio/subdomínio for igual ao resto da página, eu diria que isso soa como uma sessão típica vs.erro de saída.Certifique-se de ter habilitado todos os erros e exibi-los, pois você pode ter impresso a saída para o cliente antes de chamar session_start()
.Isso interromperá a função e tornará as sessões indisponíveis.
Para corrigir o problema (se for o caso), você deve remover todas as saídas antes session_start
.Mesmo um espaço antes <?php
será considerado saída do Apache (e outros).Certifique-se também de ter desabilitado o BOM (Byte Order Mark) no documento (qualquer editor decente permitirá que você altere isso, basta procurar algo como "Configurações atuais do arquivo").
Lembre-se sempre que a primeira linha do seu código PHP deve ser session_start();
e nada mais.Se tudo o que você vai fazer é desabilitar as variáveis de sessão e destruir a sessão, tente remover o require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');
e adicione session_start() e session_destroy() no final do arquivo logout.php e veja se funciona.