Ir para conteúdo

POWERED BY:

Arquivado

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

Gastro

Sistema de usuários online

Recommended Posts

Galera to montando um sistema de usuários online... bem

eu consigo saber quando o cara entra na pagina, porém quando sai que é o problema, pesquisei por ai e nada achei... então desenvolvi uma ideia que tive, vejam o exemplo abaixo

 

index.php

<iframe name="ifra" id="ifra" width="500" height="100" frameborder="1"></iframe><script>function verifica(){	document.all.ifra.src='online.php?pri=t';}function remove(){	window.open('online.php?pri=r&ip=<? echo $ip ?>','popupImageWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=no,width=10,height=10,screenX=0,screenY=0,top=0,left=0')//	alert();}</script><body onLoad="verifica();" onUnload="remove()"><br></body>

O evento onUnload na tag body faz com que ao se fechar a janela (X) ou dar um ALT + F4 se execute uma função, então pensei, ao se fechar a janela, executo um pop up chamando um arquivo.php que pega o IP, e remove da tabela do banco o cara...

funciona perfeitamente, mas só se o cara não tem um bloqueador de pop up...

se o cara tem dai ferro.. pq ele não é removido da tabela.. etc etc, dai da confusão.

Alguem tem uma idéia melhor ?

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou usar ajax pra abrir a página ao invés de popup Gastro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou usar ajax pra abrir a página ao invés de popup Gastro?

aham... tentei tb usandodocument.all.ifra.src = 'online.php?pri=r'assim eu passo o parametro pra remover tbmas mesmo assim, ou com ajax ele executa as vezes, parece que tem haver com a velocidade do micro etc... como o browser se fecha... parece que não da tempo dele terminar a operação.. dai não acessa o online.php passando o parametro sacas :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

ixi, então aí complica gastro.Não vejo outra solução a não ser trabalhar com tempo de sessions.Tipo, se o cara tiver 5 minutos sem acessar nada quer dizer que ele não está mais na página...Se alguem tiver uma solução melhor aí, seria bem útil...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ixi, então aí complica gastro.Não vejo outra solução a não ser trabalhar com tempo de sessions.Tipo, se o cara tiver 5 minutos sem acessar nada quer dizer que ele não está mais na página...Se alguem tiver uma solução melhor aí, seria bem útil...

Como seria essa sessions com tempo ?tp... se eu registro uma variável de sessão, pelo que sei e procurei não consigo listar elas em outra pagina... pq seria simples, cada pessoa que entra eu registro o IP numa sessão, depois como admin vejo todas as var de sessão criadas... mas pelo que sei num tem como...na realidade tentei desta forma acima... mas se tiver outro meio... outra ideia... eu mudo tudo da nadavlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fix com tempo ...

agora ficou SHOWW

vou postar ele funcando

 

index.php

<?	$ip = getenv("REMOTE_ADDR");?><iframe name="ifra" id="ifra" width="500" height="100" frameborder="1"></iframe><script>function verifica(){	document.all.ifra.src='online.php?pri=t';	setTimeout('remove()', 5000);}function remove(){	mlAtua('online.php?pri=r&ip=<? echo $ip ?>');	setTimeout('remove()', 5000);}function mlAtua(url){	http_request = false;	if (window.XMLHttpRequest) { // Mozilla, Safari,...		http_request = new XMLHttpRequest();		if (http_request.overrideMimeType) {			http_request.overrideMimeType('text/xml');			// See note below about this line		}	} else if (window.ActiveXObject) { // IE		try {			http_request = new ActiveXObject("Msxml2.XMLHTTP");		} catch (e) {			try {				http_request = new ActiveXObject("Microsoft.XMLHTTP");			} catch (e) {}		}	}	if (!http_request) {		alert('Não foi possivel criar o exemplo de XMLHTTP, feche o navegador e entre novamente, ou troque de navegador. ');		return false;	}	http_request.open('GET', url, true);	http_request.send(null);}</script><body onLoad="verifica();"><br></body>

online.php

<?	include('includeTodas.php');	$ip = getenv("REMOTE_ADDR");	$tim = time();		if($pri == "t"){		$sql = mysql_query("select ip from usu_online where ip = '$ip'");		if(mysql_num_rows($sql) == 0){			mysql_query("insert into usu_online (id, ip, data_entr, ulti_atu) values ('', '$ip', now(), '$tim')");			echo "não tem";		}else{			mysql_query("update usu_online set ulti_atu = '$tim' where ip = '$ip'");		}	}	if($pri == "r"){		mysql_query("update usu_online set ulti_atu = '$tim' where ip = '$ip'");	}?>

VerUsuOnline.php

<?	include('func_conecta.php');	$sql = mysql_query("select * from usu_online");	$tim = time();	$tim = $tim-30;	while($dados=mysql_fetch_array($sql)){		if($dados[ulti_atu] <= $tim){			echo "passou<br>";			mysql_query("delete from usu_online where ip = '$dados[ip]'");		}else{			echo $dados[ip]." - ".$dados[data_entr]." - $dados[ulti_atu]<br>";		}	}?>

 

pra criar o banco...

CREATE TABLE `usu_online` (

`id` int(11) NOT NULL auto_increment,

`ip` varchar(15) default NULL,

`data_entr` datetime default NULL,

`ulti_atu` int(15) default NULL,

PRIMARY KEY (`id`),

KEY `ulti_atu` (`ulti_atu`),

KEY `ip` (`ip`)

)

 

espero ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou bão mermo...Eu ainda não tinha pensado dessa forma. Parabéns...Quando tiver oportunidade vou usar sua filosofia ae.. Valeus..

Compartilhar este post


Link para o post
Compartilhar em outros sites

A m***** é que tpse duas pessoas da mesma empresa (mesmo IP), acessarem o site, aparecera somente um usuário online...por causa do IP...alguem tem uma dica ?tentei cookies.. mas sei lá não gosto deles hehehevlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só por cookies ou sessions mesmo.

Por cookies eu to ligado como é.. mas cookies sempre podem dar problema.. o cara ter desativado etc etccomo seria por sessions... ?a idéia de como fazer sei lávlw

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.