Login com opçao lembrar-me

candycane

Power Member
Bom dia!
estou a "ajeitar" o meu sistema de login, e uma das coisas que tou a tentar fazer é activar a opçao lembra-me... Só que não estou a conseguir criar os cookies... :(


No login.php tenho isto:
PHP:
<?php
 session_start();
 include("../includes/database.php");
 require_once("../includes/funcoes.php");
  
 $user = mysql_prep($_POST['txt_admin']); 
 $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 
 $sql = "SELECT username, nivel, password, nome
    FROM login
    WHERE username='".$user."' AND password='". $pass ."' AND nivel='admin' ";
 
      
 $resultado = mysql_query($sql, $ligacao);
  
 $linhas = mysql_num_rows($resultado);
 
 $dados = mysql_fetch_assoc($resultado);
 
 // verificar se o user quis ser lembrado
    if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass']))
 {
    $_SESSION['username'] = $_COOKIE['cookname'];
    $_SESSION['password'] = $_COOKIE['cookpass'];
    }
 
 
 if((isset($_POST['btn_entrar_admin'])) && ($linhas == 1))
 {
  $_SESSION['username'] = $user; 
  $_SESSION['password'] = $pass; 
  $_SESSION['nivel'] = $dados['nivel'];
  $_SESSION['nome'] = $dados['nome'];
  
  //cookies para opçao de checkbox lembar-me
  if($_POST['check_lembrar'])
  {  
     setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
     setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
  }
 
  header ("Location: ../backoffice/index.php");
 }
 
 
?>

Ja experimentei online, e não me cria os cookies cookname e cookpass :(

Já agora.. como se muda o nome do cookie sessao? Eu vi que ta a ser chamado PHPSID... queria personaliza-lo...
 
Bom dia!
estou a "ajeitar" o meu sistema de login, e uma das coisas que tou a tentar fazer é activar a opçao lembra-me... Só que não estou a conseguir criar os cookies... :(


No login.php tenho isto:
PHP:
<?php
 session_start();
 include("../includes/database.php");
 require_once("../includes/funcoes.php");
  
 $user = mysql_prep($_POST['txt_admin']); 
 $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 
 $sql = "SELECT username, nivel, password, nome
    FROM login
    WHERE username='".$user."' AND password='". $pass ."' AND nivel='admin' ";
 
      
 $resultado = mysql_query($sql, $ligacao);
  
 $linhas = mysql_num_rows($resultado);
 
 $dados = mysql_fetch_assoc($resultado);
 
 // verificar se o user quis ser lembrado
    if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass']))
 {
    $_SESSION['username'] = $_COOKIE['cookname'];
    $_SESSION['password'] = $_COOKIE['cookpass'];
    }
 
 
 if((isset($_POST['btn_entrar_admin'])) && ($linhas == 1))
 {
  $_SESSION['username'] = $user; 
  $_SESSION['password'] = $pass; 
  $_SESSION['nivel'] = $dados['nivel'];
  $_SESSION['nome'] = $dados['nome'];
  
  //cookies para opçao de checkbox lembar-me
  if($_POST['check_lembrar'])
  {  
     setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
     setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
  }
 
  header ("Location: ../backoffice/index.php");
 }
 
 
?>
Ja experimentei online, e não me cria os cookies cookname e cookpass :(

Já agora.. como se muda o nome do cookie sessao? Eu vi que ta a ser chamado PHPSID... queria personaliza-lo...



n sei se te pode ajudar foi o prof k deu na aula http://centroteste.net63.net/php.pdf
 
candycane, corre assim



PHP:
  if($_POST['check_lembrar'])
  {  
echo " <br> Cheguei ao Criar COOKIE ";
     setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
     setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
echo " <br> Cookies criadas: <br> <pre> ";
print_r($_COOKIE);
echo "</pre>";
  }
 
Pois ao, estranho, pergunto-me se ele cria as cookies se não fornecermos nenhum valor, ou seja, vamos lá testar se o teu SESSION tem alguma coisa.

Mete outro setcookie, este:

PHP:
setcookie("Teste", "Teste", time()+3600);

E se este aparecer no print_r, ve la se os teus $_SESSION's tem valores, porque de resto parece-me bem.


P.S: Eu não perguntei, mas isso é o 1º output que tens na página certo?

As cookies são como os headers, tem que vir antes de qualquer outro OUTPUT.
 
vi agora no firefox e esta a criar :D

Só que quando tento entrar numa area privada, vai-me ter sp a pagina login :(

tenho k verificar se ha cookies nas paginas restritas?

eu so verifio se ha sessão...
 
Sim, mas esse script está cheio de includes\require's, não podes ter nenhum OUTPUT de HTML para o ecrã, é isso que estou a dizer.

E quanto a tua pergunta, eu não estou a ver o teu sistema login, mas, isto é tão simples como:

PHP:
if ($_COOKIE["cookname"]<>"")
      $user = $_COOKIE["cookname"];

$sql = "SELECT * FROM login WHERE user='$user'";

echo $sql;


E podes ver se estás a receber os valores direitos, não tem nada que saber.
 
E quanto a tua pergunta, eu não estou a ver o teu sistema login, mas, isto é tão simples como:

PHP:
if ($_COOKIE["cookname"]<>"")
      $user = $_COOKIE["cookname"];
 
$sql = "SELECT * FROM login WHERE user='$user'";
 
echo $sql;

o meu sistema de login é este que puz ai.. a seguir so tem o html com o formulario...
 
No código que puseste ai, só estas a verificar o login através de POST, tens que por cookies e sessions antes de tudo,e depois atribuis as variáveis, e mais uma vez repito-me, fazendo quote do Mpalhas do outro tópico:

não podes ter output nenhum antes de definires o cookie. tudo o que é texto a ser enviado para o cliente (os echo's e tudo o que esteja fora das tags php) tem que vir no fim

primeiro fazes os cookies, sessions, headers etc. só depois é que podes fazer ter output
 
Última edição:
o meu sistema de login ta feito...

ta aki nesta parte:

PHP:
 $user = mysql_prep($_POST['txt_admin']);
 $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 
 $sql = "SELECT username, nivel, password, nome
    FROM login
    WHERE username='".$user."' AND password='". $pass ."' AND nivel='admin' ";
 
      
 $resultado = mysql_query($sql, $ligacao);  
 $linhas = mysql_num_rows($resultado); 
 $dados = mysql_fetch_assoc($resultado);
 
No código que puseste ai, só estas a verificar o login através de POST


PHP:
 $user = mysql_prep($_POST['txt_admin']);
 $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 
 $sql = "SELECT username, nivel, password, nome
    FROM login
    WHERE username='".$user."' AND password='". $pass ."' AND nivel='admin' ";
 
      
 $resultado = mysql_query($sql, $ligacao);  
 $linhas = mysql_num_rows($resultado); 
 $dados = mysql_fetch_assoc($resultado);


O que é que interessa ter ou não ter cookies, se tu só lés POST?

Eis a estrutura que a página tem que ter:


PHP:
<?php
session_start();
//fazer os includes que quiseres, desde que não façam output de HTML

//ir buscar as cookies, se tiveres cookies atribuires as cookies a uma variavel qualquer
if ($_COOKIE......) {
        $user = $_COOKIE......

// verificar se ha SESSION
}

if ($_SESSION.......) {
        if ($user != $_SESS..... AND $_COOKIE....<>"")
                   echo "Erro de seguranca, cookie e sessao diferente";
//se nao houver session, ver se ha post
} elseif ($_POST........) {
      $user = $_POST.........
}


//Codigo SQL para ver se o login é valido


//OUTPUT DE HTML

?>
 
Última edição:
resecrevi o script, mas mesmo assim n encaminha se o existir o cooke.. ja vi k eles existem :(
o meu include e require_onde n tem nenhum output, so funçoes.

PHP:
<?php
 session_start();
 include("../includes/database.php");
 require_once("../includes/funcoes.php");
 
 // verificar se o user quis ser lembrado
 if((isset($_COOKIE['cookname'])) && (isset($_COOKIE['cookpass'])))
 {
    $user = $_COOKIE['cookname'];
    $pass = $_COOKIE['cookpass'];  
    } 
 elseif(isset($_SESSION['username']) && isset($_SESSION['password']))
 {
  if(($_SESSION['username'] != $_COOKIE['cookname']) && ($_SESSION['password'] != $_COOKIE['cookpass']))
  {
   mostrar_formulario();
  }
 }
 elseif(isset($_POST['txt_admin']) && isset($_POST['txt_admin_pass']))
 {
  $user = mysql_prep($_POST['txt_admin']);
  $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 }
 
 $sql = "SELECT username, nivel, password, nome
    FROM login
    WHERE username='".$user."' AND password='". $pass ."' AND nivel='admin' ";
 
      
 $resultado = mysql_query($sql, $ligacao);  
 $linhas = mysql_num_rows($resultado); 
 $dados = mysql_fetch_assoc($resultado);
 
 
 if($linhas == 1)
 {
  $_SESSION['username'] = $user; 
  $_SESSION['password'] = $pass; 
  $_SESSION['nivel'] = $dados['nivel'];
  $_SESSION['nome'] = $dados['nome'];
  
  //cookies para opçao de checkbox lembar-me
  if($_POST['check_lembrar'])
  {
   setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
   setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");   
  }
   
  header ("Location: index.php");
  exit();
 }
 
 
?>


o que eu kero é que qd alguem faz o login a 1º vez e selecione a opçao lembra-me, que n tenho k fazer o login sempre que va a uma area restrita...

Como ha aki no forum, tenho o login sempre efectuado...
 
Back
Topo