Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pauloooo

onunload - tratar diferente link de fechar página

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz!!!!era isso mesmo que eu precisava!!!tem como me explicar o que você fez??seria muito útil para o meu desenvolvimento!!abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.br

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa... o forum é para isso...

 

creio eu que quando o hunternh explicar o código será util para ti!!!

 

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal eu ainda estou no trabalho, mais tarde eu posto um passo a passo explicando como fazer esse sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br"><head><meta 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"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br"><head><meta 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]);			}	};}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente eu não tinha testado essa questão das abas, mas já alterei, pode testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.