Ir para conteúdo

Arquivado

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

osk

Impedir login simultaneo

Recommended Posts

Estou desenvolvendo um site de pesquisas onde o usuario so faz a pesquisa se estiver logado, mas surgiu um problema que e esse login simultaneo, que com certeza varios usuarios podem se beneficiar com isso.O sistema de login e cadastro e em php, como posso evitar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta criar uma nova tabela no banco na qual mostra quantos onlines então e, aproveite-a para indexar os logados... caso alguém logar em uma conta já logada (comparando ips) aí bloqueia...sei lá, só to mandando uma sugestão

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum sim, me dizeram para colocar hora e data e um campo dizendo que ele ja esta logado, mas o problema e que eu nao sei fazer esse campo dizendo que ele ja esta logado. <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu to quase conseguindo, mas agora falta uma coisa que nao sei como fazer, eu criei um campo de logado no mysql que quando o usuario entraum fica 1 e quando sai fica 0, Mas agora precisar saber como fazer para quando ele logar se tiver 1 dizer que ja ta logado, e se tiver 0 ele entra normal ?Alguem sabe me dizer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto é simples amigo osk.

Você cadastra o campo no banco de dados = 1 não é?

Pois bem.

Antes da query que faz o cadastro coloque o seguinte código:

<?php $comando = "SELECT * FROM tabela WHERE nome_usuario = '$usuario' AND logado = 1";	   $resultado = mysql_query($comando);	   $contador = mysql_num_rows($resultado);	  if ($contador==0) {		//aqui você coloca o script que loga o usuário	  } else {	 die("Este usuário já encontra-se logado!!!<br>Clique <a href='www.suapagina.com.br/home.php'>Aqui</a>	 para Voltar");	  }	  ?>

No código acima $comando é a query que vai selecionar o usuário caso o nome do usuário esteja correto

e logado que é seu campo criado seja = 1, ou seja caso o usuário ja estiver logado.

O $contador vai verificar se sua query obteve resultado. Se ele der 0 significa que seu usuário ainda não logou

e ai o script que o faz logar será executado, se der 1 ele exibe a mensagem "Este usuário já encontra-se logado!!!"

e na linha de baixo um link para voltar a página principal matando o script naquele momento.

 

Qualquer dúvida poste ae.

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo o meu login.php achu que da so para acresentar o logado, da uma olhada!:

 

<?php 	  include "data.php";$login = $_POST["login"];$senha = $_POST["senha"];$cn = mysql_connect("", "", "");mysql_select_db("");$resultado = mysql_query("select * from usuarios where login = '$login' ");$linhas = mysql_num_rows($resultado);if ($linhas ==0){echo "Usuário não encontrado <br>";echo "<a href=java script:history.back(1)>Tente novamente</a>";} else {	if ($senha != mysql_result($resultado, 0, "senha"))	{	   echo "Usuário não encontrado <br>";	   echo "<a href=java script:history.back(1)>Tente novamente</a>";			 } 		else{	session_start();	$_SESSION["login_usuario"] = $login;	$_SESSION["senha_usuario"] = $senha;					header("Location: index.php");	}}mysql_close($cn);?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo o meu login.php achu que da so para acresentar o logado, da uma olhada!:

<?php 	  include "data.php";$login = $_POST["login"];$senha = $_POST["senha"];$cn = mysql_connect("", "", "");mysql_select_db("");$resultado = mysql_query("select * from usuarios where login = '$login' ");$linhas = mysql_num_rows($resultado);if ($linhas ==0){echo "Usuário não encontrado <br>";echo "<a href=java script:history.back(1)>Tente novamente</a>";} else {	if ($senha != mysql_result($resultado, 0, "senha"))	{	   echo "Usuário não encontrado <br>";	   echo "<a href=java script:history.back(1)>Tente novamente</a>";			 } 		else{	session_start();	$_SESSION["login_usuario"] = $login;	$_SESSION["senha_usuario"] = $senha;					header("Location: index.php");	}}mysql_close($cn);?>
Nesse caso Amigo Osk não poderá somente acrescentar AND $logado = 1 pois sua primeira query verifica se usuário está correto. Se o usuário estiver correto ele verifica a senha e se a mesma estiver correta ele abre a sessão, qualquer caso contrário a este no seu script ele diz que o usuário não foi encontrado. Porém seu problema não é quando o usuário não existe e sim quando tudo da certo. Se o Usuário e a Senha estiverem corretos, você vai querer saber se ele já se encontra logado ou não. Ai tem de haver outra query que vai verificar se o logado é igual a 1 ou a 0 como exemplifiquei.O Código que dei de exemplo tem de ser inserido se o usuário for encontrado no banco de dados, antes que a sessão seja aberta. Você pode fazer esta verificação de uma forma até mais simples como por exemplo:
<?php 	  include "data.php";$login = $_POST["login"];$senha = $_POST["senha"];$cn = mysql_connect("", "", "");mysql_select_db("");$resultado = mysql_query("select * from usuarios where login = '$login' ");$linhas = mysql_num_rows($resultado);//--------------primeiro código que verifica se o usuário já está logado----------------------$array = mysql_fetch_array($resultado);$logado = $array['logado'];//--------------fim do primeiro código que verifica se o usuário já está logado----------------------if ($linhas ==0){echo "Usuário não encontrado <br>";echo "<a href=java script:history.back(1)>Tente novamente</a>";} else {	if ($senha != mysql_result($resultado, 0, "senha"))	{	   echo "Usuário não encontrado <br>";	   echo "<a href=java script:history.back(1)>Tente novamente</a>";	//-------------- Segundo código que verifica se o usuário já está logado----------------------		 } 		else if ($logado==0) {	session_start();	$_SESSION["login_usuario"] = $login;	$_SESSION["senha_usuario"] = $senha;		} else { echo "O Usuário já encontra-se Logado! <br>"; echo "<a href=java script:history.back(1)>Voltar</a>";		header("Location: index.php");	}//--------------Fim do segundo código que verifica se o usuário já está logado----------------------}mysql_close($cn);?>
Tente isto e veja se funciona.Qualquer duvida posta ae.Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo muito obrigado pela ajuda você clareou muitas ideas, quero agradecer tb o Samuel Dias Neto que me ajuda bastante, achu que agora aprendi , consegui fazer o code funcionar como eu queria, agora so não sei se tem alguma coisa que nao precisa mas pelo menos ta funcionando sem nenhum problema, entao vou postar o code pronto segue:Login.php; Logout.php e valida_session.php

 

 

login.php

<?php$login = $_POST["login"];$senha = $_POST["senha"];@$db = mysql_pconnect("","","");mysql_select_db("");if(!$db){  echo "Erro: Não foi feita a conexão com o banco de dados. Tente novamente.";}$query = ("SELECT * FROM usuarios WHERE login = '$login' ");$consulta = mysql_query($query);$linhas = mysql_num_rows($consulta);if ($linhas ==0) {  echo "Usuário inexistente!<br><a href='java script:history.back(1)'>Tente novamente</a>";  exit;}$registro = mysql_fetch_object($consulta);if($senha != $registro->senha) {  echo "Senha incorreta!<br><a href='java script:history.back(1)'>Tente novamente</a>";  exit;}if($registro->logado == 1) {  echo "Este usuário já está sendo usado.<br><a href='../page_1160597515486.html' target='_blank'>Entre em contato conosco</a></br>";  exit;  }	   $query2 = ("UPDATE usuarios SET logado=1 WHERE login = '$login' ");$consulta2 = mysql_query($query2);$linhas2 = mysql_affected_rows();if ($linhas2 == 0){  echo "Campo logado não foi atualizado.";  exit;}   echo '<p><a href="logout.php?login='.$login.'">Sair do sistema</a></p>';?><h1>Soluções Consulta</h1><form action="resultado.php" method="post">  Escolha o tipo de consulta:  <select name="tipodapesquisa">	  <option value="nome">Nome</option>	  <option value="cpf">C.P.F.</option>	  <option value="end">Endereço</option>	  <option value="cep">Cep</option>	  <option value="telefone">Telefone</option>	  <option value="mae">Nome da Mãe</option>	</select>	<br />  <br />  Digite o termo a ser procurado:  <input name="termodapesquisa" type="text" />  <br />  <br />  <input name="submit" type="submit" value="Procurar" /></form><p></p>
logout.php

<?php$login = $_GET["login"];mysql_connect  ("", "", "");mysql_select_db("");$query2 = mysql_query("update usuarios set logado =0 WHERE login = '$login' "); $consulta2 = mysql_query($query2);$linhas2 = mysql_affected_rows();if ($linhas2 == 0){  echo "Erro: Campo logado não foi atualizado.";  exit;}session_start();$_SESSION = array();session_destroy();header("Location: login.htm");?>
valida_session.php

<?phpsession_start();if (isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) {	$login_usuario = $_SESSION["login_usuario"];	$senha_usuario = $_SESSION["senha_usuario"];}else{echo "Você não efetuou o login. <a href= login.htm>Logar</a>";exit();/*caso nao tinha session.. quer dizer.. ele nao logou*/} /*aqui primeiro ele checa para ver se exite essas Sessoes, e depois ele coloca o valor das sessoes nessas variaveis... para fazermos os testes!*/if(!(empty($login_usuario) OR empty($senha_usuario))){//acessa ao banco de dados$cn = mysql_connect("", "", "");mysql_select_db("");$resultado = mysql_query("select * from usuarios where login = '$login_usuario'");if (mysql_num_rows($resultado) == 1)/*caso exista esse login.. vamos testar a senha entao*/{   if ($senha_usuario != mysql_result($resultado, 0, "senha"))   {	   unset ($_SESSION["nome_usuario"]);/*apaga a session que existia mas era errada..*/	   unset ($_SESSION["sehna_usuario"]);	   echo "Você não efetuou o login. <a href=login.htm>Logar</a>";	   exit();   }}else {	   unset ($_SESSION["nome_usuario"]);	   unset ($_SESSION["sehna_usuario"]);	   echo "Você não efetuou o login.<a href=login.htm>Logar</a>";	   exit();}}else{echo "Você não efetuou o login: <a href=login.htm>Logar</a>";exit();}mysql_close($cn);?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema eh...se o cara clica em LOGOFF -> chama script q mata a sessao e altera o status do cara para offline...mas se o cara clicar no X e fechar a janela... ai como você nao tem como garantir q o script de LOGOFF foi excutado... entao o estado de online permace 1 para aquele usuario... mesmo nao estando... e ai... quando ele quiser logar... la vai falar q ele ja esta logado... e ai ele ficou preso.... e nao consegue mais logar...você ja pensou nisso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum não pensei nisso, <_< achu que tenho que criar alguma coisa com timeout certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que alguem consegue acresentar alguma função para que isso nao aconteca no code acima?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas aí será vacilo do próprio usuário...Isso acontece em vários sistemas, incluindo esse fórum do imasters...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E verdade mas aqui no forum nao diz que você ja esta logado, você entra no site ja logado,agora no meu nao ele diz que você esta logado, eu achei alguma coisa sobre timeout mas não funcionou <_<

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.