Ir ao conteúdo
  • Cadastre-se

Javascript Fazer logout ao fechar navegador ou guia


Posts recomendados

A tabela de sessões no banco de dados tem uma chave única no campo de usuário.

 

Meu login.php funciona bem:

 

<?php
            $email = $_POST['email'];
            $telegram = $_POST['telegram'];
            $senhaCampo = $_POST['senha'];

            $conn = mysqli_connect("sql308.epizy.com", "epiz_27926971", "BYzoWvJUyMCEC", "epiz_27926971_emqs");
            if(!$conn) echo "<h3>Erro ao tentar conectar com o banco de dados!</h3>";
            else{
                mysqli_set_charset("utf8", $conn);
                $sql1 = "SELECT * FROM usuarios WHERE email = '$email' AND telegram = '$telegram';";
                $query1 = mysqli_query($conn, $sql1);
                if(!$query1) echo "<h3>Email incorreto ou telegram incorreto!</h3>";
                else{
                    $assoc1 = mysqli_fetch_assoc($query1);
                    $senhaBanco = base64_decode($assoc1['senha']);
                    if($senhaBanco != $senhaCampo) echo "<h3>Senha incorreta!</h3>";
                    else{
                        $idUsuario = $assoc1['id_usuario'];
                        $primeiroNome = $assoc1['primeiro_nome'];
                        $nomeMeio = $assoc1['nome_meio'];
                        $sobrenome = $assoc1['sobrenome'];
                        $dataNasc = $assoc1['data_nasc'];
                        $email = $assoc1['email'];
                        $telegram = $assoc1['telegram'];
                        $webmaster = $assoc1['webmaster'];

                        session_start();
                        $_SESSION['id_usuario'] = $idUsuario;
                        $_SESSION['primeiro_nome'] = $primeiroNome;
                        $_SESSION['nome_meio'] = $nomeMeio;
                        $_SESSION['sobrenome'] = $sobrenome;
                        $_SESSION['data_nasc'] = $dataNasc;
                        $_SESSION['email'] = $email;
                        $_SESSION['telegram'] = $telegram;
                        $_SESSION['senha'] = $senhaBanco;
                        $_SESSION['webmaster'] = $webmaster;
                        $sql2 = "SELECT * FROM sessoes";
                        $query2 = mysqli_query($conn, $sql2);
                        $numeroLinhas = mysqli_num_rows($query2);
                        $idNovaSessao = $numeroLinhas + 1;
                        $fusoHorario = date_default_timezone_get();
                        $dataAtual = date('Y-m-d H:i:s');
                        $sql3 = "INSERT INTO sessoes (id_sessao, usuario, fuso_horario, inicio) VALUES (";
                        $sql3 .= $idNovaSessao;
                        $sql3 .= ", ";
                        $sql3 .= $_SESSION['id_usuario'];
                        $sql3 .= ", '";
                        $sql3 .= $fusoHorario;
                        $sql3 .= "', '";
                        $sql3 .= $dataAtual;
                        $sql3 .= "');";
                        $query3 = mysqli_query($conn, $sql3);
                        if(!$query3) echo "<h3>Usu&aacute;rio j&aacute; conectado!</h3>";
                        else{
                            $_SESSION['id_sessao'] = $idNovaSessao;
                            header("Location: usuarios");
                        }
                    }
                }
            }
        ?>

 

Meu logout.php funciona bem:

 

<?php
    session_start();
    $conn = mysqli_connect("sql308.epizy.com", "epiz_27926971", "BYzoWvJUyMCEC", "epiz_27926971_emqs");
    if(!$conn) echo "<h3>Erro ao tentar conectar com o banco de dados!</h3>";
    else{
        mysqli_set_charset("utf8", $conn);
        $proximaSecao = $_SESSION['id_sessao'] + 1;
        $sql1 = "DELETE FROM sessoes WHERE id_sessao = " . $_SESSION['id_sessao'] . ";";
        $query1 = mysqli_query($conn, $sql1);
        $sql2 = "SELECT id_sessao FROM sessoes";
        $query2 = mysqli_query($conn, $sql2);
        while($dados = mysqli_fetch_assoc($query2)){
            if($dados['id_sessao'] >= $proximaSecao){
                $sql3 = "UPDATE sessoes SET id_sessao = (";
                $sql3 .= $dados['id_sessao'];
                $sql3 .= " - 1) WHERE id_sessao = ";
                $sql3 .= $dados['id_sessao'];
                $sql3 .= ";";
                $query3 = mysqli_query($conn, $sql3);
            }
        }
    }
    session_destroy();
    header("Location: ..");
?>

 

Quando estou logado no meu site, clico em logout, consigo normalmente fazer o logout, mas quando fecho a guia ou o navegador, a sessão continua no banco de dados. Olha meu JavaScript:

 

window.onbeforeunload = function(){
    location.href = "logout.php";
}

 

Link para o post
Compartilhar em outros sites

@Eduardo de Quadros No passado isso funcionava muito bem.


Mas com Java Script nativo, mesmo no passado, isso não ia muito bem para mim, eu usava da seguinte forma com Jquery:

 

$(window).on("beforeunload", function() { 
    // código
});

 

Mas o que acontece agora, é que os navegadores não gostam muito disso, pois as pessoas ficavam usando isso para perguntar se o usuário queria mesmo sair da página ou para abrir outras páginas “chatas”. 


Esse exemplo acima, que coloquei e que eu usava, funcionou comigo até meados de 2020, agora, parece que não funciona mais.


Algumas pessoas conseguem fazer isso usando AJAX, você poderia tentar para ver se funciona no seu caso.

 

Outra alternativa seria isso abaixo:

 

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
</head>

<body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<script>

$(document).on("mouseleave", function(e) {
    if (e.pageY - $(window).scrollTop() <= 1) {    
        alert('deseja fazer o logout?');
    }
});

</script>

</body>

</html>

 

Nesta, você pergunta gentilmente para o usuário se ele quer fazer logout, quando ele sai com o ponteiro do mouse para fora da página do site.

 

Aguarde para ver se alguém tem outra ideia.

 

Abraços.

Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!