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

Cookie não expira

Olá pessoal, tudo bem?

Eu estou testando minha sessão e não está dando certo. Mesmo após de passar um minuto, eu continuo com a mensagem de logado.

Vocês podem me ajudar, segue os meus códigos:

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"], time() +60);
    header("Location: index.php?login=true");
}
die();

Login.php

<?php include("cabecalho.php"); ?>

<?php if(isset($_GET["login"]) && $_GET["login"]==true) { ?>
    <p class="alert-success"> Logado com sucesso!</p>
<?php }?>
<?php if(isset($_GET["login"]) && $_GET["login"]==false) { ?>
    <p class="alert-danger">Usuário ou senha inválida</p>
<?php }?>

    <h1>Bem vindo!</h1>

    <?php if(isset($_COOKIE["usuario_logado"])) {?>
    <p class="text-success">Você está logado como <?=$_COOKIE["usuario_logado"] ?>.</p>
    <?php } else {
    ?>

        <h2>Login</h2>
        <form action="login.php" method="post">
            <table class="table">
                <tr>
                    <td>Email</td>
                    <td><input class="form-control" type="email" name="email"></td>
                </tr>
                <tr>
                    <td>Senha</td>
                    <td><input class="form-control" type="password" name="senha"></td>
                </tr>
                <tr>
                    <td><button class="btn btn-primary">Login</button></td>
                </tr>
            </table>
        </form>
    <?php
    }
    ?>
<?php include("rodape.php"); ?>
7 respostas

Andre, na página login.php tira o ["email"] na linha que você seta o cookie. Algo assim:

setcookie("usuario_logado", $usuario, time() +60);

Faz um teste e dá um retorno.

Abraço.

André, experimenta recarregar a página depois desse um minuto e veja se a mensagem some, se ela sumir e voltar à aparecer o formulário para login, está tudo certo com o seu cookie, ele está expirando. Mas vale ressaltar que a mensagem não irá sumir se a página não for recarregada, o PHP gera as informações apenas do lado do servidor, assim, suas informações só mudam durante as requisições, uma vez que elas cheguem ao seu navegador elas se tornam "imutáveis" através do PHP.

Manoel e Felipe, desculpe-me pela demora no retorno. Mas, fiz os testes solicitados por vocês e mesmo assim não houve êxito.

Pode postar o código do seu buscaUsuario, Andre?

Sim, claro! Aqui está:

banco-usuario.php

<?php
function buscaUsuario($conexao, $email, $senha) {
    $senhaMd5 = md5($senha);
    $query = "select * from usuarios where email='{$email}' and senha='{$senhaMd5}'";
    $resultado = mysqli_query($conexao, $query);
    $usuario = mysqli_fetch_assoc($resultado);
    return $usuario;
}
solução!

Olá, Andre. Eu fiz o teste com seu código aqui e após os 60 segundos eu atualizei a janela e não estava mais logado...

Não faltou nenhuma parte do código? Em cabecalho.php e rodape.php realmente só tem html, ou alguma lógica também?

Carlos, obrigado!

Você está certo, o problema era o cache do meu navegador.

Mais uma vez agradeço à todos que participaram deste fórum!