Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
opa beleza!!
estou trabalhando com sessões em PHP
ai para deslogar quando o usuário fechar a página criei o seguinte código
<script>function sair(){document.URL = "sair.php";}</script><body onunload="sair()"></body>
porem estou com o seguinte problema..
como é no evento unload quando mudo de página ele também carrega o unload ocasionando o fechamento da página.
teria como tratar de uma forma diferente o clicar no fechar do clicar em um link
abraço
isso o meu sistema faz tranquilo..o lance é:se o usuário fechar a página?? o que acontece?? ele continua logado correto??mas isso não pode acontecer...pois terei varios usuário com informações diferentes!!!se é que me entende!falou
Bom no meu site também trabalho assim, com vários úsuarios logados, mas quando a pessoa fecha a janela do navegadorautomaticamente as sessions são finalizadas.
Bom no meu site também trabalho assim, com vários úsuarios logados, mas quando a pessoa fecha a janela do navegadorautomaticamente as sessions são finalizadas.
Fala ai Paulo,Bom...estou com um problema parecido com o seu..monto uma intranet no momento e gostaria de que quando o usuário tentar acessar outro dominio diferente do meu ou fechar o navegador, exiba uma tela de confirmação de logoff...porém, quando estou trocando de páginas dentro do meu sistema, a janelinha sempre aparece....e isso não é nada bom!Abri alguns posts que podem ser interessantes..http://forum.imasters.com.br/index.php?showtopic=223417http://forum.imasters.com.br/index.php?showtopic=222513Se conseguir algo, pelo amor de deus...me dah um toque..tem quase um m es que estou nisso!Vlw
Eu tenho um demo simple que faz isso, verifiquem se é exatamente o que vocês querem:
http://hunternh.110mb.com/aplicacao/
O login e a senha são "demo".
Ai paulo...pra você vai funcionar!!!
putz!!!!era isso mesmo que eu precisava!!!tem como me explicar o que você fez??seria muito útil para o meu desenvolvimento!!abraço
Pessoal, se puderem dar uma conferida na minha aplicação também eu agradeço.
Qualquer sujestão será bem vinda. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
User: teste
Pass: teste
O site ainda não esta pronto mas vale conferir.
Abraços! http://forum.imasters.com.br/public/style_emoticons/default/upset.gif
Pessoal, se puderem dar uma conferida na minha aplicação também eu agradeço.Qualquer sujestão será bem vinda. http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif http://www.odivulgador.com.brUser: testePass: testeO site ainda não esta pronto mas vale conferir.Abraços! http://forum.imasters.com.br/public/style_emoticons/default/upset.gif
Olá Tiago..Bom..quanto a seu sistema está tudo ok..bem leve e usual..Porém gostaria de fazer um comentário a respeito do seu layout...Na barra de links no topo do site(abaixo da cidade), o estilo que você utilizou deixou os links mortos...Tente colocar uma animação na cidade(ela passando para a direita, por exemplo) mantendo os links parados,...ou trocandoa cor do link. Mas a sua idéia de visão a distância ficou boa também. Bom...é somente um comentário pessoal.Abraços e bom trabalho
o seu sistema funcionando bem..porém acontece que na mesma janela do IE eu consigo fechar uma aba que esta logado beleza...quando abro outra aba na mesma janela eu já estou logado..mesmo após ter fechado a primeira!!!entendeu??falou
@pigctu - Vlw pela ajuda, vou fazer uma animação legal pra chamar mais a atenção, vlw mesmo!
@Pauloooo - Vlw pelo aviso, vou dar um jeito nisso, é que ainda não testei em nenhum outro navegador, somente no IE 6 http://forum.imasters.com.br/public/style_emoticons/default/upset.gif
Obrigado pela ajuda e boa sorte a todos.
opa... o forum é para isso...
creio eu que quando o hunternh explicar o código será util para ti!!!
abraço
Com certeza, principalmente porque esse é meu primeiro site que estou desenvolvendo em PHP e JavaScript http://forum.imasters.com.br/public/style_emoticons/default/upset.gif
então tem horas que não sei se uso PHP ou se uso JavaScript =/.
Praticamente tudo que rola no forum é novidade pra mim.
Abraços!
Pessoal eu ainda estou no trabalho, mais tarde eu posto um passo a passo explicando como fazer esse sistema.
hunternh
seria muito util que você explicasse passo a passo mesmo, tanto o PHP quanto o JavaScript...
creio que ajudaria a todos, pois seria um otimo sistema de login e senha
no aguardo
abraço
Bom pessoal eu resolvi colocar o script que eu resumi bem resumido pra ficar facil de entender e para vocês estudarem o código, já que eu estou bem apertado de tempo essa semana, mas só uma coisa no evento onunload eu estou usando uma função AJAX que eu mesmo criei, vocês podem substituir por uma que vocês usem.
index.php
<?phpsession_name("APLICACAO");session_start();$mensagemErro = null;if(isset($_GET['erro'])){ $mensagemErro = $_GET['erro'];}if(isset($_SESSION['usuario'])){ $_SESSION['logado'] = true;}header("Content-type: text/html; charset=iso-8859-1");header("Cache-Control: no-store, no-cache, must-revalidate");header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache");ob_start();?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><meta http-equiv="pragma" content="nocache" /><title>.: Aplicação :.</title><script type="text/javascript" src="padrao.js"></script><script type="text/javascript"> var requisicao = new Requisicoes();</script></head><body onload="autoTab(); <?php if($mensagemErro != null){echo "alert('".$mensagemErro."');";}?>" onunload="requisicao.exec('logout.php',null,null,'GET',null,'logout=0');"> <?php if(!isset($_SESSION['usuario'])) { ?> <form method="post" action="login.php" name="login_form" id="login_form"> <label>Login:</label><br /> <input type="text" name="txtLogin" id="txtLogin" size="15" style="margin-top: 0px;" /><br /> <label>Senha:</label><br /> <input type="password" name="txtSenha" id="txtSenha" size="15" style="margin-top: 0px;" /><br /> <input type="image" src="ok.jpg" style="border: 0px;" /> </form> <?php } else { echo "Logado como: ".$_SESSION['usuario']['nome']."<br /><a href=\"logout.php?logout=out\">Logout</a>"; } ?> <br /> <a href="teste.php">teste</a> </body></html>
login.php
<?phpsession_name("APLICACAO");session_start();$erro = false;$mensagem = null;if((isset($_POST['txtLogin']) && isset($_POST['txtSenha'])) && (!empty($_POST['txtLogin']) && !empty($_POST['txtSenha']))){ if(($_POST['txtLogin'] != "demo") || ($_POST['txtSenha'] != "demo")) { $erro = true; } $mensagem = "Login ou senha incorreto(a)."; if($erro) { header("Location: index.php?erro=".urlencode($mensagem)); } else { $_SESSION['usuario']['nome'] = "DEMO"; } if(isset($_SESSION['usuario'])) { $_SESSION['logado'] = true; header("Location: index.php"); }}else{ header("Location: index.php?erro=".urlencode("O login e a senha devem ser preenchidos."));}?>
logout.php
<?phpsession_name("APLICACAO");session_start();if((isset($_GET['logout']) && $_GET['logout'] != "out") && !isset($_SESSION['logado'])){ session_destroy();}else if(isset($_GET['logout']) && $_GET['logout'] == "out"){ unset($_SESSION['usuario']); header("Location: index.php");}unset($_SESSION['logado']);?>
teste.php apenas para teste mesmo ^^
<?phpsession_name("APLICACAO");session_start();if(!isset($_SESSION['usuario'])){ header("Location: index.php?erro=".urlencode("Você deve estar logado para acessar essa página.")); return;}if(isset($_SESSION['usuario'])){ $_SESSION['logado'] = true;}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><meta http-equiv="pragma" content="nocache" /><title>.: Aplicação :.</title><script type="text/javascript" src="padrao.js"></script><script type="text/javascript"> var requisicao = new Requisicoes();</script></head><body onload="autoTab();" onunload="requisicao.exec('logout.php',null,null,'GET',null,'logout=0');"> <?php if(isset($_SESSION['usuario'])) { echo "Logado como: ".$_SESSION['usuario']['nome']."<br /><a href=\"logout.php?logout=out\">Logout</a>"; } ?> <br /> <a href="teste.php">teste</a> </body></html>
padrao.js
//=====================================================// Validação de tipos//=====================================================isNull = function(x){ if((x == 'undefined') || (x == null)){return true;} else{return false;}};isObject = function(x){ if(!isNull(x)) { if(x.constructor == Object){return true;} else{return false;} } else{return false;}};isFunction = function(x){ if(!isNull(x)) { if(x instanceof Function){return true;} else{return false;} } else{return false;}}isBoolean = function(x){ if(!isNull(x)) { if(x.constructor == Boolean){return true;} else{return false;} } else{return false;}};isArray = function(x){ if(!isNull(x)) { if(x.constructor == Array){return true;} else{return false;} } else{return false;}};isString = function(x){ if(!isNull(x)) { if(x.constructor == String){return true;} else{return false;} } else{return false;}};isDate = function(x){ if(!isNull(x)) { if(x.constructor == Date){return true;} else{return false;} } else{return false;}};isNumber = function(x){ if(!isNull(x)) { if(!isNaN(x) && (x.constructor != Boolean) && (x.constructor != Array)){return true;} else{return false;} } else{return false;}};isInteger = function(x){ if(!isNull(x)) { if(isNumber(x)) { if((x%1) == 0){return true;} else{return false;} } else{return false;} } else{return false;}};//==========================================================// Fim da validação de tipos//==========================================================function elemento(_strID){ return (document.getElementById) ? document.getElementById(_strID) : (document.all) ? document.all(_strID) : document.layer[_strID];}//========================================================// Função de eventos//========================================================addEvent = function(o, e, f, s){ var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d; r[r.length] = [f, s || o], o[e] = function(e) { try { (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;}); e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;}); e.target || (e.target = e.srcElement || null); e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0; } catch(f){} for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false)); return e = null, !!d; }};removeEvent = function(o, e, f, s){ for(var i = (e = o["_on" + e] || []).length; i;) if(e[--i] && e[i][0] == f && (s || o) == e[i][1]) return delete e[i]; return false;};autoTab = function(){ var c = 0, lastKey = function(e){c = e.key;}, next = function(e) { var i, j, f = (e = e.target).form.elements, l = e.value.length, m = e.maxLength; if(c && m > -1 && l >= m) { for(i = l = f.length; f[--i] != e;); for(j = i; (j = (j + 1) % l) != i && (!f[j].type || f[j].disabled || f[j].readOnly || f[j].type.toLowerCase() == "hidden");); j != i && f[j].focus(); } }; for(var f, i = (f = document.forms).length; i; addEvent(f[--i], "keyup", next), addEvent(f[i], "keypress", lastKey));};//============================================================================// Requisições via XMLHttpRequest//============================================================================Requisicoes = function(){ var obj = this; var arrayRequisicoes = new Array(); var Conexoes = 0; //================================================================================= // Função para retornar os valores de um formulário em uma string para uma requisição //================================================================================= this.montaParametros = function(x) { var queryString = new Array(); var form = x; if(!isNull(form)) { for (var i = 0; i < form.elements.length; i++) { if(form.elements[i].type == "text" || form.elements[i].type == "password" || form.elements[i].type == "textarea" || form.elements[i].type == "hidden") { if(form.elements[i].value.length > 0) queryString[queryString.length] = form.elements[i].name + "=" + form.elements[i].value; } else if (form.elements[i].type == "checkbox" || form.elements[i].type == "radio") { if(form.elements[i].checked == true) queryString[queryString.length] = form.elements[i].name + "=" + form.elements[i].value; } else if(form.elements[i].type == "select-one") { queryString[queryString.length] = form.elements[i].name + "=" + form.elements[i].options[form.elements[i].selectedIndex].value; } else if(form.elements[i].type == "select-multiple") { selected = new Array(); for (var j = 0; j < form.elements[i].options.length; j++) if (form.elements[i].options[j].selected) selected.push(form.elements[i].options[j].value); if(selected.length > 0) queryString[queryString.length] = form.elements[i].name + "=" + selected; } } return queryString.join("&"); } else { alert("Formulário desconhecido!"); return; } }; //===================================================================== // Retorna um objeto XMLHttpRequest //===================================================================== this.getXmlHttpRequest = function() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Não há suporte para requisições via javascript!"); } } } }; var xmlhttp = obj.getXmlHttpRequest(); //==================================================================== // Executa a requisição //==================================================================== this.request = function(_objetoResposta,_localResposta,_funcao,_metodo) { if(!isNull(_objetoResposta)) { xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); xmlhttp.setRequestHeader("Pragma", "no-cache"); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState==1) { //if(_localResposta == "innerHTML") //_objetoResposta.innerHTML = "<div style=\"width:100%;height:450px;\">Carregando...</div>"; } if(xmlhttp.readyState==4) { if(xmlhttp.status == 200) { try { switch(_localResposta) { case "innerHTML": _objetoResposta.innerHTML = xmlhttp.responseText; break; case "innerHTML+": _objetoResposta.innerHTML += xmlhttp.responseText; break; case "value": _objetoResposta.value = xmlhttp.responseText; break; case "value+": _objetoResposta.value += xmlhttp.responseText; break; default: break; } } catch(e) { alert(e.description + " Erro ao tentar inserir o conteúdo na página"); } var scripts = _objetoResposta.getElementsByTagName("script"); var js; try { if((_localResposta == "innerHTML") || (_localResposta == "innerHTML+")) { if(_funcao != null) eval(_funcao); for(i = 0; i < scripts.length; i++) { js = scripts[i].innerHTML; eval(js); } } } catch(e) { alert(e.description + " Erro ao tentar executar uma função"); } Conexoes++ if(Conexoes < arrayRequisicoes.length) { if(_metodo == "GET") setTimeout("get(arrayRequisicoes[Conexoes][0],arrayRequisicoes[Conexoes][1],arrayRequisicoes[Conexoes][2],arrayRequisicoes[Conexoes][3],arrayRequisicoes[Conexoes][4],arrayRequisicoes[Conexoes][5])",20) else if(_metodo == "POST") setTimeout("post(arrayRequisicoes[Conexoes][0],arrayRequisicoes[Conexoes][1],arrayRequisicoes[Conexoes][2],arrayRequisicoes[Conexoes][3],arrayRequisicoes[Conexoes][4],arrayRequisicoes[Conexoes][5])",20) } else { arrayRequisicoes = new Array(); Conexoes = 0; } } else { alert("Ocorreu um problema com a requisição:\n" + xmlhttp.responseText); } } } } }; //=================================================================== // Requisição através do método GET //=================================================================== this.get = function(_strURL,_strParametros,_objetoResposta,_localResposta,_funcao,_metodo) { xmlhttp.open("GET",_strURL + "?" + _strParametros, true); xmlhttp.setRequestHeader("Content-Type", "text/html; charset=utf-8"); obj.request(_objetoResposta,_localResposta,_funcao,_metodo); xmlhttp.send(null); }; //=================================================================== // Requisição através do método POST //=================================================================== this.post = function(_strURL,_strParametros,_objetoResposta,_localResposta,_funcao,_metodo) { xmlhttp.open("POST",_strURL, true); xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); obj.request(_objetoResposta,_localResposta,_funcao,_metodo); xmlhttp.send(_strParametros); }; //=================================================================== // Recebe os parâmetros para executar a requisição //=================================================================== this.exec = function(_strURL,_objetoResposta,_localResposta,_metodo,_form,_parametro,_funcao) { if(isNull(_form)){_form = "";} else{_form = obj.montaParametros(elemento(_form));} if(!isNull(_parametro)){_form += _parametro;} if(isNull(_funcao)){_funcao = "";} arrayRequisicoes[arrayRequisicoes.length] = [_strURL,_form,elemento(_objetoResposta),_localResposta,_funcao,_metodo]; if((Conexoes+1) == arrayRequisicoes.length) if(arrayRequisicoes[Conexoes][5] == "GET") { obj.get(arrayRequisicoes[Conexoes][0],arrayRequisicoes[Conexoes][1],arrayRequisicoes[Conexoes][2],arrayRequisicoes[Conexoes][3],arrayRequisicoes[Conexoes][4],arrayRequisicoes[Conexoes][5]); } else if(arrayRequisicoes[Conexoes][5] == "POST") { obj.post(arrayRequisicoes[Conexoes][0],arrayRequisicoes[Conexoes][1],arrayRequisicoes[Conexoes][2],arrayRequisicoes[Conexoes][3],arrayRequisicoes[Conexoes][4],arrayRequisicoes[Conexoes][5]); } };}opa galera!!!copiei e colei o código, mas ainda esta com o mesmo problema que meu código tem!!!quando fecha a aba e abre outra aba com a mesma url na mesma janela do browser...ele abre normalmente, o site..não faz o logout!!!diferente do seu site!!!teria como verificar o código amigo!!!como disse estar ocupado!!!creio que nãomas se conseguir um tempo ficaria muito gratoabraço
Realmente eu não tinha testado essa questão das abas, mas já alterei, pode testar.
Wagner, faça como te falei, post isso no Laboratório de Scripts, assim fica mais fácil para quem procurar, ok?
caro hunternh testei aqui na empresa e o problema persiste!!!
antes seu sistema no site estava funcionando direitinhoo
abraço
No site eu não alterei, mas sim aqui nos scripts mesmo.
sem querer abusar hunternh
poderia colocar o site de novo no ar como estava o original
e mais ainda!!!
podereia zipá-lo mandar o link??
e não der beleza!!!
é que ai seria muito util pois trabalharia com tres tecnologias!!!
CSS PHP e Javascript
sei que é abuso...
é que lá funcionou perfeitamente!!!
abraço
O script que está postado aqui está funcionando perfeitamente agora, eu instalei no meu servidor em casa e no meu serviço, ele está deslogando no sistemas de abas do FF do IE7 e do OPERA, foi onde eu testei, só que não sei qual a razão que estando nesse servidor que eu uso o 110mb, não desloga, tenho certeza que é algo com o servidor, pois o server da minha empresa é linux e o meu em casa é o IIS nos dois funcionou.Agora esse script que está aqui no post é mais simples de entender, mas se realmente quiser eu posto o outro, só que ele está bem bagunçado.
aqui não funcionou..mas beleza!!!valeu a ajuda!!!abraço
Mas o que não está funcionando pra você, e outra coisa que servidor você está usando?
Não sei se vai ajudar, mas eu trabalho com PHP e sessões no meu site também.
Mas na hora que pessoa clica no link sair da minha página eu fasso assim:
Essa parte fica em todas as páginas quando o úsuario esta logado:
<a href="sair.php">Sair</a>
Se a pessoa clicar no sair eu faço:
<?php // Destroy session session_destroy(); header("Location: index.php"); ?>
Depois que destrui a session() eu volto pra página index.php.
Veja se ajuda, qualquer coisa mandae.
Abraço!