Logo Hardware.com.br
Kleber Costa
Kleber Costa General de Pijama Registrado
5.2K Mensagens 1 Curtida

Javascript x onUnload

#1 Por Kleber Costa 06/04/2005 - 16:36
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 smile.png
rwar
rwar Tô em todas Registrado
2.4K Mensagens 13 Curtidas
#2 Por rwar
06/04/2005 - 17:17
Kleber Costa
Estou precisando matar uma sessão mesmo para aquele usuário que usa navegador com abas(firefox por exemplo), f...

Grande Kleber!!!

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.
No caminho dos scripts. Por enquanto, powershell...
Kleber Costa
Kleber Costa General de Pijama Registrado
5.2K Mensagens 1 Curtida
#4 Por Kleber Costa
08/04/2005 - 11:33
[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 frown.png

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á frown.png
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
Acquila
Acquila Super Participante Registrado
651 Mensagens 9 Curtidas
#5 Por Acquila
08/04/2005 - 11:43
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:

[]!
Kleber Costa
Kleber Costa General de Pijama Registrado
5.2K Mensagens 1 Curtida
#6 Por Kleber Costa
08/04/2005 - 12:08
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
Acquila
Acquila Super Participante Registrado
651 Mensagens 9 Curtidas
#7 Por Acquila
08/04/2005 - 13:10
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??

[]!
Kleber Costa
Kleber Costa General de Pijama Registrado
5.2K Mensagens 1 Curtida
#8 Por Kleber Costa
08/04/2005 - 14:26
o popup é aberto e executa esse código abaixo:

<?php

/*
*
* @Author Kleber Costa <kleber.costa@gmail.com>
* @Package ######
* @Version 1.0
* @Copyright Kleber Costa
*
*/

require_once("../config.inc.php&quot;

$_SESSION = array();

if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}

session_destroy();

$Smarty = &new Setup;
$Smarty->display("extranet_logout.tpl&quot;
unset($Smarty);

?>


Eu consegui fazer "tudo", o que ficou faltando foi como ter um controle no onUnload. Pq se o usuário atualizar a página, ela é primeiro descarregada pra depois carregar de novo!! Como no onUnload da página vai abrir um popup e executar o código, o usuário quando for atualizar a página, sem querer, pq a culpa é do progamador :twisted: , vai "efetuar o logoff".

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
Acquila
Acquila Super Participante Registrado
651 Mensagens 9 Curtidas
#9 Por Acquila
08/04/2005 - 16:50
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.

[]!
Kleber Costa
Kleber Costa General de Pijama Registrado
5.2K Mensagens 1 Curtida
#13 Por Kleber Costa
19/04/2005 - 10:54
[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
thics
thics Novo Membro Registrado
1 Mensagem 0 Curtidas
#14 Por thics
26/07/2006 - 17:36
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:
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal