Login, logout e tempo de duração em php e mysql?
Pergunta
Eu gostaria de armazenar o login, logout e tempo de duração no banco de dados.
- O tempo de login é criado quando o usuário é autenticado (logado com sucesso in)
- O tempo de saída é criado quando o usuário clica no botão de logout
- A duração é de logout - tempo de login. (Sair menos login)
Mas o problema é, e se o não funcionavam usuário clique no botão de logout. Aqui estão as situações:
- perda de Internet
- Fechar o navegador / guia. (Eu preciso desse uso deve javascript, mas eu donnu como fazê-lo, alguma idéia?)
EDIT:
eu esqueci de acrescentar algo à pergunta, o programa é um programa cheio de flash, não há navegação para outra página. Apenas 1 página
Solução
Você não pode confiar em receber um evento para o usuário encerrar a sessão, se eles simplesmente fechar o navegador, ou desaparecer da internet.
Neste caso, você tem que ter um tempo limite da sessão de algum tipo, e registrar a Sair quando o seu aplicativo realiza a sessão é muito antiga.
Se esta é uma exigência real, então eu diria que você precisa de um emprego "cron" monitorando as sessões para tempo limite. Quando uma sessão acabou, se o tivesse iniciado a sessão, que, em seguida, registra um evento de "logout" para esse usuário.
Note que você não pode usar (por exemplo) evento Session_End do ASPNET, porque isso não será chamado de forma confiável qualquer um (por exemplo, se o processo do servidor é reiniciado).
Outra opção é adicionar o tempo de saída próxima vez que usuário fizer logon - quando eles fizerem logon, você verificar para sessões de idade e assumir que qualquer que não foram fechadas durou por um período fixo de tempo desde o último hit página.
Isso é realmente tudo o que você pode fazer.
Outras dicas
É importante lembrar que todas as sessões / log-in funções em PHP são normalmente com base cookie. Então, mudando a vida do cookie de sessão deve resolver o seu problema:
http://us3.php.net /manual/en/function.session-set-cookie-params.php
Além disso, você pode definir as sessões PHP para que eles só usam cookies:
http: // us2 .php.net / manual / en / session.configuration.php # ini.session.use-only-biscoitos
Mais uma vez, você pode pegar a janela do navegador / guia perto, mas ... por quê? Por exemplo, eu possa ter o seu site aberto em várias guias. Se eu fechar uma dessas guias que eu deveria automaticamente ser desconectado do seu site? Esse é um projeto muito ruim. Em vez disso, definir a duração da sessão para que ele expira se o navegador está fechado e não apenas um guia. (Note também que window.unload
vai sair quando qualquer janela em seu site que fecha -.?, Incluindo um pop-up ou um iframe Você realmente quer que)
http: //us2.php .net / manual / en / session.configuration.php # ini.session.cookie-vida
Se você quiser estado armazenamento de sessão em um banco de dados tentar qualquer um de estes guias . Ou, rolar o seu próprio com session_set_save_handler
Em relação ao fechamento do navegador / guia, você pode vincular o evento unload
(window.onunload
, do jQuery $(window).unload(fn)
, ou qualquer outro) para notificar o servidor. Uma solução objectivo mais geral seria o ping periodicamente o seu servidor (por exemplo, a cada 5 minutos), mas pode ser irritante para o usuário, assim fazê-lo criteriosamente.