Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo_nd

Usuário logado apenas em um IP (Computador)

Recommended Posts

Boa tarde pessoal. Tenho um sistema de login e senha que funciona perfeitamente. Mas hoje, por curiosidade, fiz o login em meu notebook e deixei o usuário logado. Fui a outro PC e loguei com o mesmo usuário. Ou seja, estava logado com o mesmo usuário em dois lugares diferentes. Como posso evitar isso?

 

Obrigado pessoal...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo uma forma de fazer isso eh você criar um campo na sua tabela de usuatio onde você atualiza o time que ele logou, e com AJAX você atualiza esse time a cada 5 segundos, e dai quando você for logar você verifica se o time eh superior a 6 segundo, se sim ele loga se nao ele nao deixa logar...

 

 

você pode utilizar o jQuery para ajudar a fazer essas atualizações... pode procurar no google ou aki memso no forum sobre Multiplo login, vai lhe trazer algumas coisas...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tipo uma forma de fazer isso eh você criar um campo na sua tabela de usuatio onde você atualiza o time que ele logou, e com AJAX você atualiza esse time a cada 5 segundos, e dai quando você for logar você verifica se o time eh superior a 6 segundo, se sim ele loga se nao ele nao deixa logar...

Não funciona!

Imagina que o usuário fecha o navegador antes dos 5 minutos. O BD não será atualizado e o impedirá de acessar em outro computador.

Além disso, ficar disparando requisição a cada 5 segundos é disperdício de banda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funciona!

Imagina que o usuário fecha o navegador antes dos 5 minutos. O BD não será atualizado e o impedirá de acessar em outro computador.

Além disso, ficar disparando requisição a cada 5 segundos é disperdício de banda...

 

Tem alguma sugestão???

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara muito simples pega o ip da maquina em qual ele ta logado e pronto usar id depois na sessao de login para comprar os ip e lembrar na hora de logout zerar o ip

 

Pow cara... tem algum exemplo??? eu nunca fiz nda do tipo... fiquei meio perdido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom...normalmente isso esta acontecendo com uso inadeuado de session, pois cada navegador gera um session id diferente....tentar logar no mesmo pc em 2 navegadores diferentes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom...normalmente isso esta acontecendo com uso inadeuado de session, pois cada navegador gera um session id diferente....tentar logar no mesmo pc em 2 navegadores diferentes...

Quando logo no mesmo pc em navegadores diferentes, ele permite que eu o faça com o mesmo usuário.

 


<?php

include"../necessario.php";

     session_start();

    if (isset($_POST['login'])){

       if (empty($_POST['login'])){

         $erro[] = "Informe seu login."; }
                     } else {

         $erro[] = "Informe seu login.";   }

      if (isset($_POST['senha'])){

        if (empty($_POST['senha'])){

          $erro[] = "Informe sua senha.";}

                     } else {

         $erro[] = "Informe sua senha.";}

       if (!isset($erro)) {
               $login = addslashes(htmlentities($_POST['login']));

                     $senha = addslashes(htmlentities(base64_encode($_POST['senha'])));       

                     $sql_login = "SELECT * FROM senha WHERE login ='" . $login . "' AND senha='" . $senha . "'";

                     $exe_login = mysql_query($sql_login) or die ("Erro ao executar sql" . mysql_error());

                     $num_login = mysql_num_rows($exe_login);

     if ($num_login > 0){

                $reg_login = mysql_fetch_array($exe_login, MYSQL_ASSOC);

                  $_SESSION['login'] = $reg_login['login'];

                  $_SESSION['id'] = $reg_login['id'];

			   $_SESSION['nivel'] = $reg_login['nivel'];

                    header("Location: index.php");
                             exit;
                     } else {
             $erro[] = "Usuário e/ou senha inválido.<br><a href=\"login.php\">Voltar</a>"; }
		  // $erro[] =<script>window.alert('Usuário e/ou Senha Incorretos!');}
		   }       

             if (isset($erro)) {

             echo "<ul>";

             for($i=0;$i<count($erro);$i++){
                echo "<script>
                          window.alert('Usuario e/ou Senha Incorretos!');
					   window.location.href = 'login.php';
                       </script>"; }


             }
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você entrou en NAVEGADORES DIFERENTES ou ABAS DIFERENTES NO MESMO NAVEGADOR? tem uma diferenca....eu sei e tenho certeza q ele gera uma session pra cada navegador...

 

limpe a pasta temporaria do servidor e logue nos 2 navegaores DIFERENTS, vera q cria 2 sessions...

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor.php, ele usou maquinas diferentes.

 

Oq ele quer, é não deixar q um mesmo usuario se logue mais de uma vez, ao mesmo tempo. Sendo em maquinas diferentes/browsers diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Igor.php, ele usou maquinas diferentes.

 

Oq ele quer, é não deixar q um mesmo usuario se logue mais de uma vez, ao mesmo tempo. Sendo em maquinas diferentes/browsers diferentes.

 

É isso que eu quero...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funciona!

Imagina que o usuário fecha o navegador antes dos 5 minutos. O BD não será atualizado e o impedirá de acessar em outro computador.

 

Funciona sim, pq se ele fechar o navegador ele vai parar de atualizar o campo time... e se essa atualização for maior que digamos 10 segundos ele deixa logar senao ele fala que jah esta logado...

 

 

 

Vou postar aqui um exemplo funcional de como é esse meu exemplo:

 

Criação da tabela basica com dados

CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `login` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
 `senha` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
 `time` varchar(255) COLLATE latin1_swedish_ci NULL DEFAULT NULL,
 PRIMARY KEY (`id`)
);

INSERT INTO `user` SET `login`='eduardo',`senha`='123456';
INSERT INTO `user` SET `login`='teste',`senha`='123456';

 

index.php

<form id="form1" name="form1" method="post" action="logar.php">
 <p>
   <label for="login">Login:</label>
   <input type="text" name="login" id="login" />
 </p>
 <p>
   <label for="senha">Senha:</label>
   <input type="text" name="senha" id="senha" />
 </p>
 <p>
   <input type="submit" name="button" id="button" value="Logar" />
 </p>
</form>

 

logar.php

<?php
session_start();

$conexao = mysql_connect("localhost", "root", "123456");
mysql_select_db("teste", $conexao);

$login = $_POST['login'];
$senha = $_POST['senha'];
$time = time()-10;

$sql = mysql_query("SELECT * FROM user WHERE login='$login' AND senha='$senha' AND time<'$time'");

if (mysql_num_rows($sql) > 0) {
	$row = mysql_fetch_array($sql);

	mysql_query("UPDATE user SET time='".time()."' WHERE id='".$row["id"]."'");

	$_SESSION['usr_id'] = $row["id"];
	$_SESSION['usr_login'] = $row["login"];

	header("Location: logado.php");
} else {
	header("Location: index.php?erro=logado");
}
?>

 

logado.php

<?php
session_start();
?>
<script src="jquery.js" type="text/javascript"></script>
<script>
// INICIALIZA O PRIMEIRO LOOP
loop();

function loop() {

	$.ajax({ url: "acao.php", type: "POST", data: "acao=atualizar", async: false });

	// FAZ O LOOP SER CHAMADO A CADA 5 SEGUNDOS
	setTimeout('loop()', 5000);
}
</script>

<p>id: <?php echo $_SESSION['usr_id']; ?></p>
<p>login: <?php echo $_SESSION['usr_login']; ?></p>
<p><a href="index.php">Sair</a></p>

 

acao.php

<?php
session_start();

$conexao = mysql_connect("localhost", "root", "123456");
mysql_select_db("teste", $conexao);

$acao = $_POST['acao'];

if ($acao == "atualizar") {
	mysql_query("UPDATE user SET time='".time()."' WHERE id='".$_SESSION['usr_id']."'");
}
?>

 

Espero que isso ajude...

 

 

Tem outras formas de fazer tb, você cria um cmapo onde ele indica que esta logado no sistema, e dai quando você logar ele ativa esse campo, e ao sair do sistema ele seta outro valor... e no caso do usuario clicar no X do navegador você deve implementar unload da página para executar a acao de deslogar

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.