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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top