Autor Zpráva
Lupsa
Profil *
Zdravím. Mám na stránce (kde se učím PHP) přihlašování (přes SESSIONS), ale zaboha nemohu rozlousknout tenhle oříšek. Chci se ze SESSIONS přejít na COOKIES a tak jsem podle návodu linuxsoftu a pak ještě jednoho jiného návodu, ale cookie se asi nevytvořila. Tak bych se chtěl zeptat jak tento kód na přihlašování přes cookies. Díky
          <?
$login = mysql_real_escape_string($_POST["nick"]); //Nick z formuláře
$prava = mysql_real_escape_string($_POST["prava"]); //Práva z databáze
$heslo = mysql_real_escape_string($_POST["heslo"]); //Heslo
$md5heslo = md5($heslo);//md5() hash
//Ověření přihlašovacích dat
$dotaz = mysql_query("select * from uzivatele where nick = '$login' and heslo = '$md5heslo' ");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
if($overeni == 1) {
    $_SESSION['login'] = stripslashes($login);
    $_SESSION['prava'] = $row["prava"];
    $_SESSION['id'] = $row["id"];
    $_SESSION['online'] = $row["true"];
    Header("Location: ../administrace/administrace.php");
    die();
} else {
    echo('Zadal/a jste špatné jméno nebo heslo. <a href="javascript:self.history.back();">Zpět</a>');
}
?>
Dědeček
Profil
Ty 4 řádky (7-10) můžeš dát do jednoho
if(mysql_result(mysql_query("SELECT COUNT(*) FROM uzivatele WHERE nick='$login' and heslo='$md5heslo' "),0,0))
{
}

Jinak spíš napiš jak ty cookies vytváříš ať se zjistí kde děláš chybu. Popřípadě ať vidíme co vůbec do cookies ukládáš a co pak kontroluješ.
Lupsa
Profil *
Zkoušel jsem jsem jen takhle jednoduše. Za radu do syntaxe děkuji
setcookie ("zkouska", "test");
srigi
Profil
Pracujes so SESSION, mas ju nastartovanu? Pridaj na zaciatok skriptu session_start().
Lupsa
Profil *
Ano, přišlo mi zbytečné dávat sem úplně celý kód. Na začátku mám include, které obsahuje i session_start() .. Session start je třeba i pro cookies?
Dědeček
Profil
Není pro cookies potřeba session_start() .. jen nesmí být před cookie žádný výstup jinak se cookies neuloží. To se dá realtivně obejít pomocí ob_start(); pokud máš před uložením cookies nějaký vystup.
Nejlépe uděláš když si vytvoříš v databázi další sloupec pro unikátní id, které si vygeneruješ do cookie a pak budeš kontrolovat zdali id v databázi je, pokud ano tak necháš uživatele přihlášeného (aktivní sezení) pokud není tak ho prostě přesuneš na stránku přihlášní.

function randomKey($delka){
    $cislo = "";
    $moznosti = "0123456789abcdefghijklmnopqrstuvwxyz";
    $i = 0; while ($i < $delka) 
      { $char = substr($moznosti, mt_rand(0, strlen($moznosti)-1), 1);
      if (!strstr($cislo, $char))
         {$cislo .= $char; $i++;
         }
      }
    return $cislo;
}


 if(mysql_result(mysql_query("SELECT COUNT(*) FROM uzivatele WHERE nick='$login' and heslo='$md5heslo' "),0,0))
{
$key=randomKey(12)
setcookie ('key', $key, time() + 60*60*24, '/');
}

Potom si normálně napsat funkci pro kontrolu přihlášení například
$key=$_COOKIE["key"];
if(!mysql_result(mysql_query("SELECT COUNT(*) FROM uzivatele WHERE key='$key'"),0,0))
{
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: /prihlaseni/");
        header("Connection: close");
}

snad jsem tam ve spěchu nenapsal chybu.
Lupsa
Profil *
Děkuji, ale zdá se, že se cookie přesto nevytvořila. Když zadám
$key=$_COOKIE["key"];
echo $key;
Nic se nevypíše.
Dědeček
Profil
A žádnou chybu nevypisuje? Zkus si vytvořit nový soubor php, uplně mimo systém a vytvoř cookie a zkus ji načíst.
Lupsa
Profil *
Žádná chyba. Vyzkoušel jsem úplně mimo systém a i tak nic.
Davex
Profil
• Máš vyzkoušeno, že skript něco dělá? - třeba pomocí echo "ok";
• Je zapnuté zobrazování chyb PHP?
• Není před funkcí session_start() nebo setcookie() nějaký výstup, třeba i prázdný řádek nebo BOM na začátku souboru?
• Nenastavuješ cookies na jiné doméně nebo subdoméně než se čte?
Lupsa
Profil *
Omlouvám se. Až dnes jsem si všiml, že tomu určuju hodnotu $key která není definována. Ještě pokud bych mohl zeptat... V řádku
setcookie ('key', $key, time() + 60*60*24, '/');
první hodnota je název, druhý je hodnota, třetí je čas a ten poslední?
nemeja
Profil
nemáš vypnutý cookies v prohlížeči?
jenikkozak
Profil
Lupsa:
první hodnota je název, druhý je hodnota, třetí je čas a ten poslední?
Viz manuál.
Lupsa
Profil *
nemeja: Už jsem psal, že jsem jim dával hodnotu proměnné, která není definována. Ale děkuji
jenikkozak: Děkuji

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: