Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Está acontecendo o seguinte:
Se o login estiver correto direciona o usuário para a página privada. Na página privada o usuário efetua o logout (as variáveis de sessão são destruídas), e então é direcionado novamente para a página de login. Na página de login se o usuário, neste momento, clicar no botão voltar do navegador ele retorna para a página privada e continua como se estivesse logado isso é notado pois o nome de usuário (que está numa variável de sessão que foi destruída) continua setado. Porém se tentar acessar a página privada pela URL o browser vai entender que o usuário não está logado pois as variáveis de sessão foram destruídas, e vai direcionar o usuário para a página de login.
Por que está acontecendo esse erro, e como impedir que ao clicar no botão voltar o usuário continue logado, se a sessão já foi destruída?
Aqui vai o código apenas com o que é necessário para o Login e Logout:
Página login.php
<?session_start();function htm(){ echo"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" /> <title>teste</title></head><body><form name=\"Login\" method=\"post\" action=\"login.php\"> Nome de usuário: <input type=\"text\" name=\"username\" value=\"nome\" size=\"6\" maxlength=\"6\" readonly=\"true\" /><br /> Senha de usuário: <input type=\"text\" name=\"password\" value=\"senha\" size=\"6\" maxlength=\"6\" readonly=\"true\" /><br /> <input type=\"submit\" name=\"submit\" value=\"Entrar\" /> </form></body></html>";}if ($_SERVER['REQUEST_METHOD'] == "POST"){ if($_POST['username'] != "nome" || $_POST['password'] != "senha"){ echo "não pode logar<br >"; htm(); }else{ $_SESSION['username'] = $_POST['username']; $_SESSION['password'] = $_POST['password']; unset($_POST['username']); unset($_POST['password']); header("Location: private.php"); exit; }}else{ htm();}?>Página **logged.php**
<?session_start();if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){ header("Location: login.php"); exit;}else{ if($_SESSION['username'] != "nome" || $_SESSION['password'] != "senha"){ header("Location: login.php"); exit; }}?>Página **private.php**
<?session_start();require "logged.php";echo "<h2>Privado</h2><br />";echo "<a href=\"logout.php\">logout</a><br /><br />";echo "Você está logado como: <b>" .$_SESSION['username']. "</b><br />";?>Página **logout.php**
<?session_start();if(!isset($_SESSION['username']) || !isset($_SESSION['password'])){ header("Location: login.php"); exit;}else{ session_unset(); if(session_destroy()){ header("Location: login.php"); }else{ echo "<b>Ocorreu um erro ao destruir a sessão.</b><br />"; }}?>Carregando comentários...