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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top