Ir para conteúdo

POWERED BY:

Arquivado

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

calintro

Problema com sistema de login com cookies

Recommended Posts

Bom, quando ele autentica o login, confirma senha, etc. O sistema faz o seguinte:

 

setcookie("logado", md5('positivo'));

setcookie("login", base64_encode($login));

require_once('teste.php');

 

Esse teste.php é onde ele vê se o usuário está logado, é uma página privada. Porém, o que acontece é o seguinte: Na primeira tentativa de login ele simplesmente não loga, na segunda, loga. O teste.php tem um arquivo "proteger.php" que verificar a existência do cookie "logado", caso contrário retorna pra index. O que acontece é: Primeira tentativa vai pra index, segunda, vai pra página teste.php certinho. O que pode ser?

 

PS. Eu sei dos problemas de se usar cookie pra login, mas o cliente bateu o pé que queria assim :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse teste.php é onde ele vê se o usuário está logado

aí você não ta verificando se o cookie já existe ou não...

você ta criando o cookie...

 

pra verificar, faça assim...

 

// verifica se o cookie existe
if(isset($_COOKIE["logado"]) {
echo "logado";
}
else {
echo "faça o login";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse teste.php é onde ele vê se o usuário está logado

aí você não ta verificando se o cookie já existe ou não...

você ta criando o cookie...

 

pra verificar, faça assim...

 

// verifica se o cookie existe
if(isset($_COOKIE["logado"]) {
echo "logado";
}
else {
echo "faça o login";
}

Meu post ficou ambígüo hehe

 

O código que colei não é do teste.php, é o autenticar.php. Citei o teste.php porque depois que autentica, ele cria os cookies e manda o usuário para a teste.php que é uma página privada.. o teste.php está exatamente como você postou

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça um teste simples...

 

faça um form com os campos login e senha, uma página para validar e criar os cookies, e outra para verificar se os cookies existem...

 

veja se irá funcionar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, to com o mesmo problema!

A estruturação está exatamente dessa forma:

 

Tenho uma tela de logon em html básico, tem o minimo necessario, um campo de user name, um de senha e o botao de confirmar.

Ao clilcar no botao ele chama uma pagina php que valida esses dados, caso sejam confirmados o cookie é registrado e chama-se a proxima pagina que verifica o conteudo do cookie e faz o que tem que fazer, caso seja falso ele chama o logon html de novo com uma msg de erro de login invalido.

 

Porém há um pequeno "delay" nessa de registrar o cookie.

Na primeira, mesmo com usuario e senha válidos ele nao aparece o usuário registrado direitinho, mas depois se eu dou um refresh no index (onde verifica a existencia do cookie e seu conteudo, direcionando pro logon ou tela inicial do sistema) ele "termina" de logar e enfim envia pra tela inicial (confirmando que o cookie tava setado normalzinho).

Muito estranho isso, to fazendo uma gambi feinha pra ele 'pular' essa primeira etapa... mas não é muito elegante xD

Alguma sugestão?

 

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A página proteger.php ficou assim:

 

<?php

if(empty($_COOKIE['logado'])) {

require('erro.php');

}

?>

Mas deu na mesma, eu digito login/senha, ele não loga, eu atualizo e tá logado :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

A parte do form na index.php:

 

...
	<td colspan="12" align="center" valign="middle" background="images/index_r6_c1.jpg">
	<?php if(isset($_COOKIE['logado'])) {
		$cookie = base64_decode($_COOKIE['login']);
	?><p class="tx3">Você está logado como <?php echo $cookie; ?><?php } else { ?>
	
	<form name="autenticar" method="post" action="autenticar.php">
	  <label>
		<input name="login" type="text" class="form1" id="login" value="login" />
   
		</label>
	  <label>
		<input name="senha" type="password" class="form1" id="senha" value="senha" />
   
		</label>
	  <label>
		<input name="ok" type="submit" class="form1" id="ok" value="      ok" />
		</label> <?php } ?>
	  
	  <label>
		<input name="busca" type="submit" class="form1" id="busca" value="   busca" />
   
		</label>
	  <label>
		<input name="busca2" type="text" class="form1" id="busca2" size="50" />
		</label>
	</form></td>
...

autenticar.php:

<?php

include ('config.php');
include ('string.php');

$login = trim(string($_POST['login']));
$senha = trim(string($_POST['senha']));


if ($_COOKIE['cadastrado'] == 'sim') {
	 	
		$consulta = mysql_query("SELECT * FROM usuarios WHERE login = '$login'");
			if (mysql_num_rows($consulta) == '1') {
			while($res = mysql_fetch_array($consulta)) {
				$conSenha = $res['senha'];
				$conValida = $res['valida'];
				} 
			
			if ($conValida == 'S') {
			
					
					if(md5($senha) == $conSenha) {
					
						setcookie("logado", md5('positivo'));
						setcookie("login", base64_encode($login));
						require_once('teste.php');
					
					} else {
						echo "Senha inválida";
					}
				
				}	else {
					echo "Valide seu login";
				} 
				
				} else {
				
				echo "Login inválido";
				
				}
	
} else {

	echo "Você não tem permissão para vizualizar";

}

?>

teste.php:

<?php

include ('proteger.php');

?>
...(resto da página)

proteger.php:

<?php

if(empty($_COOKIE['logado'])) {

require('erro.php');

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta colocar uma data pra ele,

 

 

setcookie($nome, $valor, time()+(3600 * 24 * 6));

onde o 6 é a quantidade de dias validos pro cookie

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta colocar uma data pra ele,

 

 

setcookie($nome, $valor, time()+(3600 * 24 * 6));

onde o 6 é a quantidade de dias validos pro cookie

Não funcionou :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

não são as configurações do seu browser não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque ob_start(); no topo da página.

E ao invés de incluir a pagina tente mandar um header(Location: ...) para transferir a pagina.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Amigos!

 

Eu já tive esse mesmo problema com COOKIE só funcionar na segunda vez ou dando um F5 (atualizar)...

 

Então, podemos resolver esse problema com um header('location:?'); que faria o papel do F5 ;-)

 

//--- Setando cookie de login

setcookie('login',true);

//--- Redirecionando a pagina para si mesma (isso é igual a "Atualizando a pagina")

header('location:?');

 

 

Vejam um código completo como exemplo de login com COOKIE:

 

<?
	//---  Dados do usuário
	$usuario = 'usuario';
	$senha = 'senha';
	
	
	//--- LOGIN - Autenticando
	if($_POST['logar']){		
		if($_POST['usuario'] == $usuario && $_POST['senha']==$senha){
			
			//--- Setando cookie de login 
			setcookie('login',true);
			//--- Redirecionando a pagina para si mesma (isso é igual a "Atualizando a pagina")
			header('location:?');

		}else{
			echo "<center style='color:red'>Login incorreto!</center>";
		}
	}
	
	//--- LOGOUT
	if(isset($_GET['logout'])){
		//--- Setando cookie de login
		setcookie('login',false);
		//--- Redirecionando a pagina para si mesma (isso é igual a "Atualizando a pagina")
		header('location:?');
	}
	
	
	//--- SE ESTA AUTENTICADO - MOSTRA A PAGINA RESTRITA
	if($_COOKIE['login']){
			
		?>
			<center>
				 Você está logado!<br>
				 <a href="?logout">Sair</a>
			 </center>
		<?

	//--- NAO LOGOU - MOSTRA A PAGINA DE LOGIN	
	}else{
		
		?>
			<center>
				<form method=POST>
					Usuário:<br>
					<input name=usuario><br>
					Senha:<br><input type=password name=senha><br>
					<input type=submit name=logar value=Login>
			 	</form>
			 </center>
		<?
		
	}
?>

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.