Autor | Zpráva | ||
---|---|---|---|
Lupsa Profil * |
#1 · Zasláno: 7. 1. 2012, 19:25:58
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 |
#2 · Zasláno: 7. 1. 2012, 21:15:32
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 * |
#3 · Zasláno: 7. 1. 2012, 21:26:27
Zkoušel jsem jsem jen takhle jednoduše. Za radu do syntaxe děkuji
setcookie ("zkouska", "test"); |
||
srigi Profil |
#4 · Zasláno: 7. 1. 2012, 21:34:42
Pracujes so SESSION, mas ju nastartovanu? Pridaj na zaciatok skriptu
session_start() .
|
||
Lupsa Profil * |
#5 · Zasláno: 7. 1. 2012, 21:36:09
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 |
#6 · Zasláno: 7. 1. 2012, 21:50:48
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 * |
#7 · Zasláno: 8. 1. 2012, 16:21:29
Děkuji, ale zdá se, že se cookie přesto nevytvořila. Když zadám
$key=$_COOKIE["key"]; echo $key; |
||
Dědeček Profil |
#8 · Zasláno: 8. 1. 2012, 19:30:28
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 * |
#9 · Zasláno: 8. 1. 2012, 19:43:47
Žá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 * |
#11 · Zasláno: 10. 1. 2012, 18:45:27
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 |
#12 · Zasláno: 10. 1. 2012, 19:44:50
nemáš vypnutý cookies v prohlížeči?
|
||
jenikkozak Profil |
#13 · Zasláno: 10. 1. 2012, 19:48:41 · Upravil/a: jenikkozak
|
||
Lupsa Profil * |
#14 · Zasláno: 10. 1. 2012, 21:11:22
nemeja: Už jsem psal, že jsem jim dával hodnotu proměnné, která není definována. Ale děkuji
jenikkozak: Děkuji |
||
Časová prodleva: 11 let
|
0