Login com opçao lembrar-me

Tu fazes pouco debug, ajeitando a lógica do código, substitui o que te vou dar pelo teu, de:

// verificar se o user......

até antes do código SQL

PHP:
if (isset($_POST['txt_admin']) AND isset($_POST['txt_admin_pass']))
{
  $user = mysql_prep($_POST['txt_admin']);
  $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
}


if (isset($_COOKIE['cookname']) AND isset($_COOKIE['cookpass'])) 
{
   echo "<br> o user quis ser lembrado -> ". $_COOKIE['cookname'] ." pass: ". $_COOKIE['cookpass'];
   $user = $_COOKIE['cookname'];
   $pass = $_COOKIE['cookpass'];
}

if (isset($_SESSION['username']) AND isset($_SESSION['password']))
{
   if ($_SESSION['username'] != $_COOKIE['cookname'] OR $_SESSION['password'] != $_COOKIE['cookpass'])
        mostrar_formulario();
}

echo "<br> user: ". $user ." e a pass: ". $pass;
 
o zend vai fazendo debug por mim :D

eu pus online e ja esta tudo OK, n sei se tem alghuma coisa haver.. mas com o localhost n funcionava direito..
 
Ajeita o teu código conforme a minha lógica de qualquer maneira, porque se não tu não verificas as sessions se houver cookies, e tu queres verificar como medida extra de segurança.

E mete o POST primeiro, para o caso de alguém tentar fazer login por POST, tendo session ou cookie ser ignorado :)


Ainda bem que ja está :D
 
primeiro o post?

eu mudei um pouco... se as sessoes e cookis n forem iguais eu apago anbos.... e portanto o post tem k ser feito... ve se concordas:

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']))
  {
   $msg = "Area restrita, por faço efectue o seu login.";
   //apagar os cookies e session se os dados não baterem certo...
   $_SESSION = array();
   setcookie('cookname', '', time()-60*60*24*100, "/");
      setcookie('cookpass', '', time()-60*60*24*100, "/");
  }
 }
 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 mais importante continua igual.

Já repaste que tens um elseif na SESSION

Ou seja se houver cookies, ele não vê as sessions, e tu queres que ele veja para poder verificar se são iguais ou não.

Ponto 2, o POST vem em 1º, alguém só vai tentar fazer login, se nao tiver session ou COOKIE, portanto vir em 1º nao causa incomodo, agora vir por ultimo não tem lógica.

Tem que ser 3 if's independentes, e não elses.
 
Hmm entendi :)

Portanto.. fica assim:

PHP:
if(isset($_POST['txt_admin']) && isset($_POST['txt_admin_pass']))
 {
  $user = mysql_prep($_POST['txt_admin']);
  $pass = sha1(mysql_prep($_POST['txt_admin_pass']));
 }
 
 // verificar se o user quis ser lembrado
 if((isset($_COOKIE['cookname'])) && (isset($_COOKIE['cookpass'])))
 {
    $user = $_COOKIE['cookname'];
    $pass = $_COOKIE['cookpass'];  
    } 
 
 if(isset($_SESSION['username']) && isset($_SESSION['password']))
 {
  if(($_SESSION['username'] != $_COOKIE['cookname']) && ($_SESSION['password'] != $_COOKIE['cookpass']))
  {
   $msg = "Area restrita, por faço efectue o seu login.";
   //apagar os cookies e session se os dados não baterem certo...
   $_SESSION = array();
   setcookie('cookname', '', time()-60*60*24*100, "/");
      setcookie('cookpass', '', time()-60*60*24*100, "/");
  }
 }
 
sql...........
 
Back
Topo