|
![]() |
||
Javascript x onUnload
|
||
. Nós temos 701.164 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) |
|
Zumbi
|
Estou precisando matar uma sessão mesmo para aquele usuário que usa navegador com abas(firefox por exemplo), feche a aba que roda o sistema. Logo de cara deu tudo certo, no onUnload do browser foi só executar uma função em javascript pra abrir um popup, executar o código e exibir uma msg tipo: "Para sua segurança a sessão foi finalizada automaticamente!". O problema é que no caso do usuário atualizar a página, ele é deslogado e aparece a msg.
Em javascript tem como eu saber se o usuário está carregando novamente a página? Pq aí eu teria como montar uma função, se o usuário está atualizando a página - não execute tal coisa. Sacaram? Se tiver alguma solução alternativa tb é bem vinda ![]()
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#2 (permalink) | |
|
GeeK
|
Citação:
Não sei te dizer precisamente se há alguma possibilidade, mas já tentou utilizar refresh em javascript? Creio que se pode utilizá-lo de alguma maneira. Um abraço.
__________________
Em busca de certificações Linux (LPI + RHCE)!!! |
|
|
|
|
|
|
#3 (permalink) |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 8
Mensagens: 86.070
Reputação: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Pq não usa um cookie de sessão?
Assim, mesmo que a pessoa esqueça de fechar o sistema ao fechar o navegador, ao retornar, o cookie será inválido... pra completar, vc põe ele pra expirar em 5 ou 10min sem uso.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
|
#4 (permalink) |
|
Zumbi
|
[roni]
Grande Roni!!! Tudo certinho por aí? Eu já tentei de tudo hehehe, até apelei pra abrir uma janela em fullscreen e dar um nome a ela e não sei como fazer pra perguntar se ela está fechada(window.closed)! Pq como eu vou executar um código na página e perguntar se ela mesma está fechada hehehe! O que tá faltando pra fazer isso funcionar é o "jogo de cintura" em javascript que não tenho! já to quase desistindo :| Quanto ao refresh, eu não consegui achar nada na internet que pudesse me ajudar Abração! [jqueiroz] O problema maior é que eu quero deletar a sessão(sess_73uh73e37) lá no servidor!! Aí com cookie de sessão se o usuário não clicar em logout.php(por exemplo) vai ficar o arquivo lá Se eu não conseguir fazer isso que estou querendo, vou usar cookies como vc sugeriu! Valeu! Abraços!
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#5 (permalink) |
|
Super Participante
Registrado em: Mar 2002
Mensagens: 654
Reputação: 18
![]() |
Kleber, há algum motivo importante pra ter que deletar os restos mortais da sessão no servidor ? Explico: quando um usuário fecha o navegador, o arquivo de sessão no servidor é "esvaziado", ficando com 0k de tamanho, ou seja, apenas uma referência. Esses arquivos não interferem no desempenho do servidor e nem influenciam as sessões válidas.
De repente vc pode mesmo continuar usando sessões e, por preciosismo, pode criar um evento no Kron ( ou uma tarefa agendada no win) para de tempos em tempos apagar os arquivos cujo tamanho seja 0k. Se eu não entendi o problema e falei bobagem, desenha preu entender... :mrgreen: []! |
|
|
|
|
|
#6 (permalink) |
|
Zumbi
|
Kleber, há algum motivo importante pra ter que deletar os restos mortais da sessão no servidor?
Eu mudei o path pra guardar as sessões dentro do meu "site" por exemplo, o dir das sessions seria home/meusite/sessiondata/. Além disso minha preocupação maior é com os navegadores com abas! Pq mesmo que aba seja fechada, a sessão ainda é válida pois o navegdor ainda não foi fechado. Essa idéia de fazer um script pro kron executar eu até passou pela minha cabeça, mas eu fiquei pensando: "Imagina se tem alguém logado na hora que isso rodar hehe vai derrubar o cara do sistema". Agora essa idéia de deletar os arquivos com 0k é bem interessante pq exclui essa possibilidade de derrubar o alguém do sistema! Pra ser bem franco, minha vontade mesmo é forçar para que o script de logoff seja executado mesmo sem a "colaboração" do usuário. Entendeu tudo :mrgreen:
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#7 (permalink) |
|
Super Participante
Registrado em: Mar 2002
Mensagens: 654
Reputação: 18
![]() |
Hmm... na minha opinião a questão das abas não chega a mudar muita coisa. Quando não haviam as abas, tinhamos o Netscape e o IE e normalmente abríamos mais de uma página em janelas separadas, isso quando o próprio navegador não fazia esse "favor" pra nós. Normalmente uma pessoa que usa um navegador sem abas abre mais de uma página e nesse caso a sessao continua existindo, mesmo que apenas exista um popup chato minimizado na barra de tarefas.
Pra forçar o logoff, como vc quer, a solução é a que vc mesmo citou: no UnLoad da página, abra uma janela popup de um script php que teste se existe a sessão e a destrua. Vc pode simplesmente usar um session_destrioy() ou um unset() e depois usar um print pra exibir uma mensagem formatada na tela, tipo "tchau, mané! Sua sessão foi destruida". Eu pessoalmente não gosto de usar javascript. Claro que muita coisa acaba caindo no javascript e eu tenho que engolir minha incompetência, mas se algo puder ser feito de outra forma, eu procuro até achar... Quer que eu faça um exemplo do negócio pra vc aprimorar?? []! |
|
|
|
|
|
#8 (permalink) |
|
Zumbi
|
o popup é aberto e executa esse código abaixo:
Código:
Eu pensei numa solução que teoricamente deve funcionar mas como é tão "gambiarra" que fica sem noção fazer um bagulho desse e além de tudo tem um pequeno problema! Saca só? 1 - No onUnload vou redirecionar a página pra index.php?action=unload e colocaria na sessão a url corrente, pra pegar mais tarde. Aí nesse index.php eu faria em js um código pra perguntar se a janela winX(por exemplo) está aberta, caso esteja é considerado como um refresh e redireciona para a url que está na guardada na sessão, senão abre uma janela e executa o código de logoff. No item 1, tem um problema, se o usuário fechar a janela, não vai ter como redirecionar para o index.php?action=unload! Outra coisa, eu não sei bem js, por isso não tenho 100% de certeza de que eu possa perguntar se a janela WinX tá aberta por causa da hierarquia das janelas, janela filha e tal aquelas coisas... Acquila, vc sabe como fazer esse controle para identificar, quando usuário está atualizando a página ou está fechando e/ou aba/navegador no onUnload?
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#9 (permalink) |
|
Super Participante
Registrado em: Mar 2002
Mensagens: 654
Reputação: 18
![]() |
Kleber, eu fui cortar o cabelo e fiquei lá pensando nesse problema. O evento Reload implica em um unLoad inicial, ou seja, não há como diferenciar um do outro porque o unload SEMPRE vai existir. Por outro lado, existe o evento onBeforeUnload que executa algo LOGO ANTES de fechar a janela atual. Vc pode usar esse evento pra abrir o index destruindo a sessão, mas vai continuar com o problema do evento ocorrer quando a página for recarregada.
[]! |
|
|
|
|
|
#10 (permalink) |
|
Ubbergeek
Registrado em: Dec 2002
Localização: Rio de Janeiro
Idade: 34
Mensagens: 4.518
Reputação: 22
![]() ![]() |
Kleber, desculpe pela demora.
Vou pesquisar sobre outras formas mais "internas" para se fazer isso e te falo depois ok? Postei aqui só pra dar uma alô mesmo.
__________________
Entretenimento é aqui! |
|
|
|
|
|
#11 (permalink) |
|
Zumbi
|
[Acquila]
É mesmo [Avalle] Tranquilo!! Fico no aguardo!!
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#12 (permalink) |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 8
Mensagens: 86.070
Reputação: 257
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Alguma chance de colocar um evento no crontab pra matar as sessões inativas há mais de X minutos?
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
|
#13 (permalink) |
|
Zumbi
|
[jqueiroz]
Seria a mesma idéia que o Acquila sugeriu lá em cima. -------------------------------------------------------------------------------------------------- Hoje eu fui ver qual o motivo da minha matrícula em uma cadeira ter sido indeferida e lembrei que o SIG@ tem esse esquema de forçar o logoff do usuário, dei uma olhadinha no código! E tem esse mesmo "bug" que eu estou apanhando pra resolver! Pelo menos não sou o único :mrgreen:
__________________
Salve! Ó terra dos altos coqueiros! De belezas soberbo estendal! Nova Roma dos bravos guerreiros Pernambuco, imortal, imortal! Linux User #262254 |
|
|
|
|
|
#14 (permalink) |
|
Newbie
|
Gente, vê se vcs acham loucura oq eu estou fazendo. Fiz assim:
function abrejanela(){ if (exit == 1) window.open('sair.php','Sair','scrollbars=no,width =100,height=100,left=10,top=10'); } exit=1; daí no body onload fica assim: body onload="exit=0" onunload="abrejanela" :roll: E em cada link coloco assim: a href='blabla.php' onclick="exit=0" E para saír: a href='javascript:window.close();' onclick="exit=1" Digam se vcs acharam mta loucura isso q eu fiz ou se atende as necessidades de vcs... :wink: |
|
|
|
|
|
#15 (permalink) |
|
Newbie
Registrado em: Sep 2006
Mensagens: 1
Reputação: 0
![]() |
Brother eu sei o que vc ta precisando, e sei como resolver eu ja passei por isso, é um gato da ***** mais funciona, se nao tiver resolvido me fala que eu posto aqui...
|
|
|
|
|
|
#16 (permalink) |
|
Zumbi
|
Bom, eu teria preferência pelo script no cron que remove os arquivos, você pode usar o find para determinar quais arquivos foram modificados mais recentemente, isso evitaria que você derrubasse usuários logados.
O popup que desloga o usuário pode falhar facilmente, basta haver um bloqueador de popup que a idéia já vai pras cucuias! hehe. Também existem os casos onde a conexão do usuário simplesmente cai, não possibilitando que código algum seja executado. Levando estas situações em conta, com certeza você terá sessões abandonadas na sua pasta de sessions. Enfim, caso não queira MESMO usar o crontab, então você pode escrever um script em PHP que lê toda a pasta de sessions e determina quais arquivos foram modificados recentemente e remove os outros, então vc coloca o script como include e tudo deve funcionar. Enfim, isso iria gerar um load desnecessário no servidor. Ainda acho que o crontab é a melhor alternativa! hhe Falow!
__________________
FMC = Fábio Magalhães Catunda |
|
|
|
|
|
#17 (permalink) | |
|
Newbie
Registrado em: Nov 2007
Mensagens: 1
Reputação: 0
![]() |
Citação:
|
|
|
|
|
|
|
#18 (permalink) | |
|
Newbie
Registrado em: Apr 2008
Mensagens: 1
Reputação: 0
![]() |
Citação:
Obrigado |
|
|
|
|
![]() |
| Opções do Tópico | |
|
|