| 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: 14 let
|
|||
0