Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, sei que já deve ter muitos tópicos desse mas não achei nenhum com a solução que desejo. Então eu tenho um chat no meu site, e quando o usuário loga o status muda para 1 e quando desloga para 0, mas e quando ele fechar o navegador a aba ou sair de uma forma que não seja o logout? como posso forçar esse logout?
Não sou chegado no JavaScript como faria isso?
Se você quiser resolver esse problema você tem que "chegar" no JavaScript. - Uma recomendação para você, mesmo não sendo interessante aprender jQuery antes de Javascript. Você pode utilizar o jQuery para lhe ajudar nesse problema, mas não deixe de estudar JavaScript, pois eé uma linguagem que lhe ajudará muito.
Para enviar os dados para o PHP:
http://api.jquery.com/jQuery.post/
Detectar o browser fechamando:
Simplemente quando o $.unload for acionado você pode enviar um $.post para o PHP de que o usuário "x" fechou o navegador e que a sessão pode ser encerrada.
OBS: Pode dá merd**, afinal, quando o browser fecha ele não "espera", então, pode ser que não dê tempo para você enviar a notificação para o PHP. (Nunca testei, faça seus testes).
Você também pode utilizar o onbeforeunload do Js.
Faria igual o Hive falou e ainda juntaria session + ip + banco!
Alguem tem algum exemplo de como usar isso? pq tentei aqui e nao deu mto certo :x
Não existe uma forma de saber com o PHP se o usuário fechou a aba ou navegador pois não temos "controle" sobre ele (navegador).
Tá! Mas a autenticação não tem nada a ver com o browser, logo o PHP não precisa realmente saber se a aba/janela foi fechada ou não.
Uma vez que a grande maioria das técnicas de autenticação simplificada envolve sessões, se o PHP conseguir determinar quando uma sessão deixa de existir é possível sim efetuar alguma rotina diferenciada, com manipuladores de sessão customizados.
:seta: Leitura Recomendada
Não existe uma forma de saber com o PHP se o usuário fechou a aba ou navegador pois não temos "controle" sobre ele (navegador). Estamos falando de dois níveis distintos (y) - Cliente e servidor.
Uma solução possível seria utilizar o JavaScript como "watcher" para fazer essa verificação e depois enviar o status da janela via post (ajax) para o PHP.
self.closed