Ir para conteúdo

POWERED BY:

Arquivado

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

gRoOvE

Lembrar login...

Recommended Posts

gostaria de saber como fazer akele "lembrar login" quando a pessoa vai logar e marca a opcao lah, acho q eh por COOKIES "/

 

se for, um exempl ?? se nao, tem como fazer de outra forma ?? vlws

Compartilhar este post


Link para o post
Compartilhar em outros sites

velho nao sabe onde posso ler algo mais claro sobre cookies, nao intendi nada do php.net "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para salvar um cookie:

 

setcookie("nome_do_cookie", "valor");

se voce não passar nenhum valor para ele, o cookie expirará quando a pagina for fechada

 

para salvar um cookie com tempo:

 

setcookie("nome_do_cookie", "valor", time()+3600);

o tempo é em segundos entao 3600 segundos = 1 hora

 

para testar se o cookie existe:

 

if(isset($_COOKIE["nome_do_cookie"])){
echo "OK Ja ta logado";
} else {
echo "Nao ta logado redirecione para pagina de login";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, sakei...mas na pagina onde ele vai fazer o login que vai ter o checkbox caso o usuario queira ser lembrado, tenho q passar o valor do checkbox pro banco ?? e quando eu quiser que o cookie do usuario NUNCA expire, que soh expire quando ele fizer logout ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa salvar no banco. Na página de login, verifique se o usuário marcou o checkbox. Se sim, crie o cookie, caso contrário, não o crie.

 

É bom criar um script como auto_login.php, que verifique se os dados do login coincidem com os salvos no BD. Isso prov6e mais segurança, já que os cookies podem ser editados ou até mesmo criados.

 

Outra coisa: crie um array com os dados do login e use serialize() para salvá-los no cookie. Depois use unserialize(). Isso é útil quando se precisa salvar um array ou objecto no formato de string. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

heAE hIAUEAHE calma veio, eu nem consegui fazer a parte mais simples...essa parte que você falou se o cara marcar o checkbox criar o cookie ou nao eh na parte do formulario ou na parte PHP q vai processar o formulario ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu quis dar a idéia geral. vamos por partes, como diria Jack Estripador. :)

 

 

Esse checkbox será marcado no login. Faça as verificações de usuário e senha. Se estiverem corretos, verifique se o checkbox foi marcado. Se sim, crie o cookie.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom na verdade entao vou ter q usar SESSION e COOKIE juntos né ?

 

pois como você falou "ali verifique se o checkbox foi marcado. Se sim, crie o cookie." ... se não foi marcado eu nao crio o COOKIE e consequentemente nao vou conseguir logar, pois eu preciso do COOKIE pra conseguir gravar os dados como se fosse SESSION, não é ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu costumo usar session e cookie. Uso cookie só para mater o usuário logado, caso ele o deseje. Mas dá para fazer o sistema somente com cookies. Nesse caso, o cookie sempre seria criado, mas com um pormenor: se o checkbox for marcado, o cookie ficará ativo por um tempo mais longo. Caso contrário, o cookie expirará ao fechar o navegador (neste último caso, nem é necessário definir o "tempo de vida" do cookie, como o Fabyo já citou)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahh agora sakei, entao vou fazer primeiro só por COOKIE, definindo os dois com "tempo de vida" diferentes.

 

Me diga ma coisa, e quando eu quiser fazer o COOKIE nunca expirar ?? ficar lah até que o usuário faça logout "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

e agora como estou usando SESSION e COOKIE juntos, como vo fazer eles trabalharem juntos olha meu codigo como está:

se por exemplo a pessoa marca o checkbox "lembrar login", fecha a pagina e abre denovo...a SESSION nao vai mais existir SÓ o COOKIE e ai ??

ali onde tem $_SESSION['login'] vai fica com erro "/

<?php
	if (isset($_SESSION['login']) || (isset($_COOKIE['login']))){
	?>
	<table>
		<tr>
			<td>
			Bem Vindo: <?=$_SESSION['login'];?><br />
			Seu Último acesso foi: <?=$_SESSION['data_ultimo_login'];?><br />
			Nível: <?=$_SESSION['nivel'];?>
			[ <a href="logout.php">SAIR</a> ]
			</td>
		</tr>
	</table>
	<?
	} else {
	?>
	<form action="login_db.php" method="post">
	<table>
		<tr>
			<td>Login:</td>
			<td><input type="text" name="login" size="15" /></td>
		</tr>
	</table>
<?
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para verificar se a sessão foi iniciada:

PHP
if (!isset($_SESSION))

{

    session_start();

}

Isso evita que se use $_SESSION sem ter iniciado a sessão.

 

 

Depois basta verificar se o cookie existe. Se existir, pegue os valores, faça as verificações no BD e, se estiver tudo ok, salve-as nas variáveis de sessão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a sessao jah foi inciada no topo da pagina...eu nao consigo fazer elas trabalharem juntas "/

ve se esse meu code ta certo:

<?php
session_start();
include "config.php";

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


	if (empty($login) || empty($senha)) {
		if (empty($login)) {
			echo "Digite seu Login<br />";
		}
		if (empty($senha)) {
			echo "Digite sua Senha<br />";
		}
	} else {
	$sql_login	= "SELECT * FROM membros WHERE login ='$login' AND senha='$senha'";
	$exe_login	= mysql_query($sql_login) or die(mysql_error());
	$num_login	= mysql_num_rows($exe_login);
		if ($num_login > 0) {
		$reg_login = mysql_fetch_array($exe_login);
			if($reg_login['nivel'] > 0){
				$dados				= array();
				$dados['nome']		= $reg_login['nome'];
				$dados['senha']		= $senha;
				$dados['nivel']		= $reg_login['nivel'];
				$dados['login']		= $login;
				$_SESSION['dados']	= $dados;
			
				if(isset($_POST['gravar'])){
					setcookie("dados", serialize($dados), time()+10);
				}
				mysql_query("UPDATE membros SET data_ultimo_login = now() WHERE login = '$login'");
				header("location: index.php?categoria=protegido");
			} else {
				echo "Login e/ou senha incorretos";
			}
		}
	}
?>

depois eu tento fazer a logica...caso a SESSION ou COOKIE exista ele mostra "Bem vindo usuarioX" e esconde o form pra pessoa logar com o login e senha...isso que nao to conseguindo se marcar a checkbox e salvar o COOKIE ai ele mostra certo mas se for só na SESSION fica soh o form pra login "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está correto. Apenas reveja o tempo que o cookie existirá. No seu caso, ele só ficará ativo por 10 segundos.

 

 

Vou postar o arquivo auto_login.php, que criei para usar em sistemas de login. O código está comentado e acho que será fácil de entender.

 

OBS: A classe MySQLiConnection() é extendida da classe MySQLi, presente no PHP 5.

 

auto_login.php

PHP
<?php

/*

   Este script verifica a existência do cookie de auto-identificação. Se ele existir, certfica-se de que as informações nele presentes coincidem com as armazenadas no banco de dados.

   Este script é rodado na index.php.

*/

 

if (isset ($_COOKIE["login"]))

{

       

        $dados = unserialize($_COOKIE["login"]);

       

        $MySQLi = new MySQLiConnection();

       

        $sql = $MySQLi->query("Select login, senha, id_nivel From ". TB_USUARIOS ." Where id = " . $dados['id_usuario']);

       

        if ($sql->num_rows != 1)//se não existir um usuário com o id presente no cookie

        {

                //destrói o cookie

                setcookie("login", "", time() - 1, "/");

               

                if (isset($_SESSION['login']))

                {

                        unset($_SESSION['login']);

                }

               

        }

        else//se for encontrado somente um usuário

        {

                $f = $sql->fetch_object();

                if ($dados['login'] != $f->login || $dados['senha'] != $f->senha || $dados['nivel'] != $f->id_nivel)//se os dados não coincidirem

                {

                        //destrói o cookie

                    setcookie("login", "", time() - 1, "/");

                   

                    if (isset($_SESSION['login']))

                    {

                            unset($_SESSION['login']);

                    }

                   

                }

                else

                {

                        //cria $_SESSION['login'] com os dados do cookie

                        $_SESSION['login'] = $dados;

                }

        }

       

       

}

   

 

?>

 

É simples e funcional. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, vou analisar o codigo...mas me diga uma coisa nessa parte do script:

$dados				= array();
				$dados['nome']		= $reg_login['nome'];
				$dados['senha']		= $senha;
				$dados['nivel']		= $reg_login['nivel'];
				$dados['login']		= $login;
				$_SESSION['dados']	= $dados;
a $_SESSION['dados'] pega o valor das variaveis $dados['nomecampo'] e transforma tudo em $dados['nomemcapo'] ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

beraldo, aproveitei o topico do fabyo ensinando a fazer bem isso que estou querendo -> http://forum.imasters.com.br/index.php?showtopic=261114

 

só nao intendi esse codigo inline:

$dados = isset($_SESSION["dados"]) ? $_SESSION["dados"] : unserialize($_COOKIE["dados"]);
echo "Seja Bem-Vindo ". $dados["nome"]." ";
pq aqui parece que ele juntou td, as SESSION e COOKIE em uma variavel soh $dados['nomecampo'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sintaxe equivale a um if:

 

PHP
if (isset($_SESSION['dados']))

{

    $dados = $_SESSION['dados'];

}

else

{

    $daods = unserialize($_COOKIE["dados"]);

}

 

Chama-se operador ternário:

PHP
$var = (condicao) ? true : false;

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.