leandro
(usa Arch Linux)
Enviado em 01/12/2013 - 19:41h
tuxton escreveu:
Olá Leandro,
Muito obrigado pelo seu retorno.
Estou montando um sistema de login, mas é para fins de aprendizado mesmo.
Estou criando um login que não seja multi usuário, onde quando o usuário loga ele grava no banco de dados em uma tabela de controle de sessões que criei, e quando faz logout também grava nessa tabela para liberar uma nova sessão.
Mas quando se fecha no X, não consegui tratar.
Vou dar uma olhada nesse tópico que você me mandou.
Obrigado pela atenção.
Entendi. Esse é um belo desafio, rsrs.
Você pode fazer de uma outra forma (não é bonito, mas é um meio mais garantido): estabelecer um limite de tempo para cada login. Funciona assim:
1. Ao logar, o usuário grava no banco a hora atual. Cria-se também uma variável $_SESSION['timer'] para armazenar a hora atual na sessão recém-aberta.
2. A cada "session_start()" que você usar para verificar se o usuário está logado, cheque se já se passaram 5 minutos (por exemplo), através da variável $_SESSION['timer']. Se o tempo de 5 minutos já se passou, dê um update no BD e na variável $_SESSION['timer'] com a hora atual.
Desse jeito, você armazena no BD a hora da última atividade do usuário (pelo menos a cada 5 minutos, para evitar que se façam muitas requisições ao BD).
Por fim, quando um outro usuário for logar, cheque no BD se a última atividade de um usuário é maior do que 5 minutos. Se for maior, é porque o usuário está inativo. Se for menor, ele ainda está logado.
Desse jeito, há um único inconveniente: um delay de 5 minutos para que um usuário inativo tenha a sua sessão expirada. Mas você pode diminuir ou aumentar isso dependendo do propósito do seu projeto.
Para assegurar-se de que 5 minutos de inatividade encerre a sessão do usuário, você pode combinar isso com o
$lifetime do session_set_cookie_params:
http://www.php.net/manual/pt_BR/function.session-set-cookie-params.php
Um abraço.