Pergunta

No meu aplicativo PHP, estou usando $ _Session para rastrear se um usuário está conectado. Se um usuário deixar qualquer página no meu site em http://mysite.com e vai para http://omeotherwebsite.com, Eu quero logon -los automaticamente, de modo que, se eles retornarem a qualquer página em http://mysite.com, eles precisam fazer login novamente.

Existe uma maneira fácil de fazer isso?

Foi útil?

Solução

Você não pode dizer explicitamente quando um usuário folhas Seu site, sua melhor aposta seria implementar um tempo limite em suas sessões.

Como a maioria das respostas disse, você poderia Verifique com o evento JavaScript onbeforeunload Mas o usuário pode desviar isso desativando JavaScript ou, como Balusc apontou, usando um navegador da Web que não o suporta, como o Opera.

Portanto, acredito firmemente que a implementação de um tempo limite em suas sessões é a melhor maneira de forçar um logout.

Outras dicas

Você pode executar uma chamada de Ajax no ONBEFOREUNLOAD Evento para algum script lateral do servidor que matará a sessão.

Exceto por colocar um tempo limite em suas sessões - na verdade não. A única maneira que vem à mente é o onbeforeunload Evento JavaScript que dispara quando o usuário sai da página atual, mas esse evento não sabe Onde o usuário está indo. Você poderia, no entanto, se você verdade quero fazer isso, pode ser Construa algo baseado na seguinte solução alternativa (não testada):

  • defina um onbeforeunload Evento que envia uma chamada AJAX para o seu servidor. (Como fazer isso com sucesso - para que a chamada seja aprovada antes que a página seja fechada - é uma questão própria, uma pesquisa por "onBeforeUnload Ajax", portanto, deve produzir alguns resultados.

  • A chamada do Ajax iniciaria uma contagem regressiva dizendo que a sessão deste usuário está prestes a morrer, digamos, quinze segundos.

  • Se o usuário estiver saindo do seu site, a contagem regressiva se aplica.

  • Se o usuário estiver indo para uma página diferente no seu site, você limpa qualquer contagem regressiva "Die" ao servir a próxima página.

É provável que seja instável, porque pode acontecer que um pedido de Ajax iniciando Uma contagem regressiva chega ao servidor após a próxima página já ter eliminado aquela contagem regressiva. Mas se você realmente precisa fazer isso, isso pode ser uma direção. Funciona para usuários com JS ativado apenas, é claro.

Uma segunda idéia de como implementar isso seria colocar um tempo limite extremamente baixo em sessões (por exemplo, 90 segundos) e colocar um iframe Em todas as páginas que você serve. Esse iframe faria uma chamada para a página a cada 60 segundos.

Isso funcionaria sem JavaScript, mas poderia criar ruídos irritantes de cliques em versões mais antigas do Internet Explorer (não sei se isso parou em 6 ou 7?)

Você não pode (mas suas sessões vão sair automaticamente depois de um tempo; para que você possa definir o tempo limite para um curto período de tempo).

Pelo que sei sobre o PHP (o que não é muito), seu aplicativo saberia que eles deixaram o site? Se você for para algum OutherWebsite.com, seu código não será chamado novamente até que eles retornem.

Infelizmente, na verdade, esse é um dos grandes problemas com os aplicativos da Web. Seus aplicativos não têm como saber que o navegador passou para um site diferente.

Como Christohped menciona, você pode definir o tempo limite da sessão. Lembre -se de que seu site apenas atualizará o tempo em que o servidor recebe uma postagem ou algum tipo de ping JavaScript.

Espero que ajude

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