Solucionado (ver solução)
Solucionado
(ver solução)
21
respostas

Quando clico em "SAIR", ele sai. Mas se eu clicar na seta para voltar, ele acessa novamente.

Quando clico em "SAIR", ele sai. Mas se eu clicar na seta para voltar, ele acessa novamente. Mesmo usando session_destroy();

Meu código está com algumas modificações, pois adaptei para o meu layout. Mas isso que não estou entendendo. Após fazer o logout e redirecionar para a página de login novamente, eu clico na seta para voltar ou digito o link lá em cima e ele consegue acessar.

Sou iniciante em PHP, uma pessoa bastante curiosa e gosto de usar minha criatividade. Se alguém puder ajudar, serei grato.

Abraços e bons estudos.

21 respostas

Oi Hugo, tudo bem? O botão de voltar é um probleminha meio chatinho, isso por que, quando você clica em voltar, não necessariamente o navegador está fazendo um novo request, ele pode estar pegando o estado da página anterior e apenas exibindo.

Quando você tenta acessar alguma coisa que precisa do login, depois que aperta voltar, ele funciona normal? Como se estivesse logado ou é só a primeira vez?

Bom dia Wanderson. Quando eu clico em voltar ou digito o final do link lá em cima, ele volta e consigo mexer nas coisas. Consigo navegar por todas as páginas. Mesmo se eu apertar ctrl+f5, não resolve. Ele continua logado.

Entendi, cola aqui o código que verifica o login por favor Hugo?

esse é meu código do login.php

<?php include("conecta.php");
include("banco-usuario.php");

$usuario = buscaUsuario($conexao, $_POST["email"], $_POST["senha"]);
if($usuario == null) {
  header("Location: index.php?login=0");
}else {
  setcookie("usuario_logado", $usuario["email"]);
  header("Location: obras.php?login=1"); 


}
die();

Nas outras páginas eu coloquei um if e else. Caso tente acessar e não consiga, ele fica na página de login e só aparece o formulário e a logo. Se ele fizer o login, aparece o conteúdo, a logo e o menu de navegação. Se ele fizer o login, ele é redirecionado para a página "obras.php" que é a página principal. A index.php é somente a página para login.

Me mostra como é esse if que verifica a sessão por favor?

<?php include('conecta.php'); ?>

<?php if(isset($_GET["login"]) && $_GET["login"]==false) { ?>
    <p class="alert-danger">Preencha os campos corretamente</p>
<?php }?>

<?php if(isset($_COOKIE["usuario_logado"])) {?>
<?php include('cabecalho-login.php'); ?>


<div class="geral"><!--geral-->
<div class="formulario-geral"><!--formulario-geral-->


<div class="campos-formulario"><!--campos-formulario-->



<h1>Cadastro de obras</h1>
<form action="http://www.sonatacultural.com.br/gb/cadastro-obras.php" method="post" class="">
<div class="titulo-da-obra">
<p>Título da obra</p>
<input name="titulodaobra" type="text" value="" placeholder="Título da obra">
</div>

<hr>

<div class="subtitulo">
<p>Subtítulo</p>
<input name="subtitulo" type="text" value="" placeholder="Subtítulo">
</div>

<hr>

<div class="instrumental">
<p>Instrumental</p>
<p style="float:left; margin:0;">Sim</p>
<input class="checkbox" name="sim" type="checkbox" value="Sim">
<p style="float:left; margin:0;">Não</p>
<input class="checkbox" name="nao" type="checkbox" value="Não">
</div>

<div style="clear:both"></div>
<hr>

<div class="instrumental">
<p>Editado</p>
<p style="float:left; margin:0;">Sim</p>
<input class="checkbox" name="simm" type="checkbox" value="Sim">
<p style="float:left; margin:0;">Não</p>
<input class="checkbox" name="naoo" type="checkbox" value="Não">
<div class="subtitulo">
<input name="editora" type="text" value="" placeholder="Sem SIM, digite o nome da EDITORA neste campo">
</div>
</div>

<div style="clear:both"></div>
<hr>

<div class="autores-pseudonimos">
<p>Autores/Pseudônimos</p>
<input name="autoresPseudonimos" type="text" value="" placeholder="Autores/Pseudônimos" >
</div>

<hr>

<div class="interprete">
<p>Intérprete</p>
<input name="interprete" type="text" value="" placeholder="Intérprete" >
</div>

<button class="botao-enviar" type="submit">Cadastrar</button>

</form>

   </div><!--campos-formulario-->

</div><!--formulario-geral--> 





    </div><!--geral-->

</div>
</div>


<?php } else {?>

<?php include('cabecalho.php'); ?>
<form action="login.php" method="post" style="margin: 0 auto; width: 220px; padding: 10px; background-color: #222222;">
<table>
            <tr>
            <td style="font-size: 10px; padding: 5px; color: #999;">E-mail</td>
            </tr>
            <tr>
            <td><input class="form-control" type="Email" name="email"></td>
            </tr>
            <tr>
            <td style="font-size: 10px; padding: 5px; color: #999;">Senha</td>

            </tr>
            <tr>
                <td><input class="form-control" type="password" name="senha"></td>
            </tr>
            <tr>
                <td><button class="btn btn-primary" style="width: 100%; margin: 10px auto 0;">ENTRAR</button></td>
            </tr>
</table>
</form>
<?php } ?>

<?php include('rodape.php'); ?>

Certo, agora me mostra o arquivo que faz o logout do usuário por favor.

<?php include('logica-usuario.php');
logout();
header("location: obras.php?logout=true");
die();

e o arquivo logica-usuario.php

<?php
session_start();

function logout() {
    session_destroy();
}

OI Hugo, vendo aqui, você está misturando duas coisas diferentes e por isso tá uma confusão. Se você utilizar cookies para controlar a sessão do usuário, você precisa apagar esse cookie quando for fazer o logout, a função session_destroy() não destroy o cookie diretamente.

A documentação mesmo comenta isso. http://php.net/manual/en/function.session-destroy.php

Se você utiliza cookie para configurar as sessões, então no momento de destruir a sessão, você precisa invalidar o cookie também.

Tudo que for cookie, eu tenho que trocar para session? Lembro que vi isso em uma vídeo aula. Mas quando faço essa troca, fica sempre na página de login.

Hugo, desculpa a demora, mas sim, você pode trocar tudo para session ou então, no logout fazer a remoção do cookie, por que você não está fazendo isso. Entende?

Eu tinha trocado tudo para session, mas ai ele fica sempre na página de login.. mesmo se eu logar, ele atualiza e continua na página de login. Creio que o IF e ELSE esteja errado ou talvez invertido. Estou tendo que desinstalar e instalar o WAMP sempre que ligo o meu computador, não sei o motivo disso. Quando vou logar no phpmyadmin, ele diz que o usuário root não pode logar. Ai sempre demoro para editar os arquivos e fazer as devidas correções.

Sobre o projeto no github e me manda o link aqui por favor?

Wanderson, não consegui subir para o github mas coloquei um link no meu site. É só clicar lá que coloquei o arquivo em .RAR para download. https://www.tecnopartes.com.br/pasta-login.html

A lógica será o seguinte: Ele entra no link principal e aparece para fazer o login. Quando ele acessa, ele já abre na página "obras.php" que será o primeiro do menu de navegação. Quando ele faz o logout, ele volta para o link principal onde faz o login. Sendo que se clicar na seta lá em cima do navegador, ele tem que destruir a sessão e pedir para efetuar o login e não voltar para dentro do painel. Entende?

Beleza Hugo, vou baixar e testar, quando tiver um feedback te dou um retorno aqui.

Beleza! Mas acho que achei o defeito. Tem algumas coisas que estão faltando. Vou dar uma mexida aqui no código também e caso consiga resolver, eu venho aqui avisar. Obrigado

solução!

Wanderson, consegui resolver.

Estava faltando uns códigos no "logica-usuário.php" e incluir algumas coisas nos arquivos das páginas internas. Agora está tudo resolvido. Obrigado pela sua atenção e bons estudos.

Opa Hugo, era isso que eu ia olhar, mas que bom que você já conseguiu ver que faltavam coisas no seu projeto.

Bons estudos e precisando, pode contar com a gente aqui no fórum!

Valeu Wanderson! Foi só esfriar a cabeça e colocar para pensar um pouquinho que tudo se resolveu. Obrigado pela ajuda! Abraços