Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pedro Gabriel

Sair do site e continuar lá

Recommended Posts

Olá, sou novo aqui no fórum e tenho uma duvida...

 

Estava criando um sistema de cadastro e login quando eu achei que marcar os usuários que estão online seria um tanto legal.

Então fiz com que quando a pessoa logasse em sua conta fosse enviado ao mySQL para mudar o valor de online para 1

e quando clicar em sair/logout mudar para 0

 

Mas depois de fazer isso percebi que se eu sair do site sem clicar em sair/logout eu iria ficar logado para sempre...

 

e então me veio a duvida, como eu devo fazer para que quando a pessoa fechar o site/navegador ela mude o valor para 0?

 

Não sei se eu deveria fazer com 0 e 1 no mysql, mais foi o único jeito que encontrei.

 

Se alguém tiver com uma ideia e gostaria de compartilha-la comigo eu ficaria agradecido. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se ele não executar nenhuma ação em X minutos, considerar como deslogado.

 

se o forum me deslogasse em x minutos so pq não fiz nenhuma ação, eu não voltaria mais - serve pra qq site

ficar inativo nao quer dizer que não esteja la

um sistema desse é 'espanta membro'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a ideia do André não foi exatamente essa.

Ele quis dizer que o sistema deve CONSIDERAR na exibição dos users online, o fulano deslogado, e quando este der sinal de vida novamente, volta a exibir no quadro de users online.

 

Pelo menos essa é minha ideia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer o login por cookies e fazer o MySQL mudar o valor. Assim, o php checa se o dado do cookie confere com o do banco de dados toda vez que for acessar uma página oculta, e o 0/1 fica só pra a listagem de usuários online, sem ter nada a ver com o login =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

realmente a ideia do André foi boa, mais e se eu tiver fechado a janela?

ai não vai ter como ver a inatividade

por que o script só é executado se eu estiver com a página aberta eu imagino

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como colocar pra mudar pra 0 TODOS os usuários que ficarem inativos por um número X de segundos. Aí, qualquer execução da página (sua, do usuário ou de um visitante) irão executar o script =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

enfia javascript que resolve o problema :D

 

<script style='text/javascript' >

var janela;

janela=window.location='URL';

if (janela.closed )

{

//janela esta fechada

//aqui você chama a função php para mudar o valor do mySQL do user para 0!

}else

{

//janela esta aberta

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode inserir na sua index ou em uma cronjob um script que verifique todos os horários das últimas ações dos usuários.

 

User1 - Ultima atualizacao ha 6 minutos atras - considerado off

USER2 - ultima atualizacao ha 2 minutos - ON

 

Se não me engano é isso que é feito aqui no IPB.

 

Dá para ser feito com JS também. Uma função simples como OnBeforeUnload inicia uma rotina ajax para marcar o usuário como inativo. Mas isso eu já acho gambiarra.

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

User1 - Ultima atualizacao ha 6 minutos atras - considerado off

USER2 - ultima atualizacao ha 2 minutos - ON

 

não é assim nao, se fosse o chat do facebook nao iria funcionar

fico constantemente com o fb aberto em uma aba e horas sem executar ação, mas as vezes tem uma msg de um camarada que me enviou pq me viu como online, ai quando vou escrever, ele aparece offline

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o forum me deslogasse em x minutos so pq não fiz nenhuma ação, eu não voltaria mais - serve pra qq site

ficar inativo nao quer dizer que não esteja la

um sistema desse é 'espanta membro'

Não foi essa a minha ideia :). O HAXOR já explicou.

 

realmente a ideia do André foi boa, mais e se eu tiver fechado a janela?

ai não vai ter como ver a inatividade

por que o script só é executado se eu estiver com a página aberta eu imagino

Cada usuário que usa e acessa o fórum irá executar essa rotina. Concorda que a lista de usuários logados é gerada e exibida para todos os outros usuários MENOS o que está inativo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu acho bom utilizar esse metodo que o falcao544 esta indicando, tipo é + ou - como os chats funcionam...

 

Eu tenho um exemplo simples...

 

criação da tabela

CREATE TABLE `usuario` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  `time` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
);

index.php

<?php
        session_start();
        
        require("conexao.php");
        
        if (isset($_POST['id'])) {
                $id = $_POST['id'];
                mysql_query("UPDATE usuario SET time='".time()."' WHERE id='".$id."'");
        }
?>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
        $(document).ready(function(){
                $("td#online").load("online.php?acao=online");
                loop();
        });
        
        function loop() {
                <?php if (isset($_POST['id'])) { ?>
                        $("td#online").load("online.php?acao=atualiza&id="+<?php echo $id; ?>);
                <?php } else { ?>
                        $("td#online").load("online.php?acao=online");
                <?php } ?>
                
                // FAZ O LOOP SER CHAMADO A CADA 5 SEGUNDOS
                setTimeout('loop()', 5000);
        }       
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>
        <form id="form1" name="form1" method="post" action="">
          id
          <input type="text" name="id" id="id" />
          <input type="submit" name="button" id="button" value="Submit" />
        </form>
    </td>
  </tr>
  <tr>
    <td>Usuarios on-line:</td>
  </tr>
  <tr>
    <td id="online"> </td>
  </tr>
</table>

 

online.php

<?php
        require("conexao.php");
        
        $acao = $_GET['acao'];
        
        if ($acao == "atualiza") {
                $id = $_GET['id'];
                mysql_query("UPDATE usuario SET time='".time()."' WHERE id='".$id."'");
                $time = time()-10;
                $sql = mysql_query("SELECT * FROM usuario WHERE time>='".$time."'");
                while ($rows = mysql_fetch_array($sql)) {
                        echo $rows["nome"].", ";
                }
        }
        
        if ($acao == "online") {
                $time = time()-10;
                $sql = mysql_query("SELECT * FROM usuario WHERE time>='".$time."'");
                while ($rows = mysql_fetch_array($sql)) {
                        echo $rows["nome"].", ";
                }
        }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.