Autor | Zpráva | ||
---|---|---|---|
World Profil |
#1 · Zasláno: 27. 5. 2007, 20:06:06
Čau,
se session jsem měl nějaké problémy, a tak jsem se rozhodl udělat auto. odhlášení takto: $cookie_read = explode("|", base64_decode($user)); $userid = $cookie_read[0]; $sql_time_check = $db->sql_query("SELECT CURTIME()<last_action FROM `account` WHERE `id`='$userid'"); $time_check = $db->sql_numrows($sql_time_check); if($time_check == 1){ global $db, $userid; $db->sql_query("UPDATE `account` SET `last_action`=NOW() + INTERVAL 5 MINUTE WHERE `id`='$userid'"); }else{ $db->sql_query("UPDATE `account` SET `online`='0' WHERE `id`='$userid'"); unset($user); setcookie("user", false); $user = ""; } když udělám nějakou akci tak se sice last_action v databáze aktualizuje, ale když je aktuánl čas větší jak last_action tak se to stejně neodhlásí a přitom toto : unset($user); setcookie("user", false); $user = ""; používám normálně při odhlášování (po kliknutí na odkaz Odhlásit) funguje bez problémů... díky předem za pomoc |
||
Aleš Janda Profil |
#2 · Zasláno: 27. 5. 2007, 20:24:55
$sql_time_check = $db->sql_query("SELECT CURTIME()<last_action FROM `account` WHERE `id`='$userid'");
$time_check = $db->sql_numrows($sql_time_check); if($time_check == 1){ ... zamysli se nad tím, jestli tohle někdy může fungovat. Co vrátí dotaz SELECT cokoli FROM tabulka WHERE id ='$userid' ? Pokud existuje to id a takový uživatel je právě jeden, tak to vždy vrátí 1 řádek. A ty pak kontroluješ počet řádků. To je ale samozřejmě vždy 1... Tu podmínku dej za WHERE. |
||
World Profil |
#3 · Zasláno: 27. 5. 2007, 20:32:26 · Upravil/a: World
Aleš Janda
no jo ale ja zkusil tento dotaz: SELECT CURTIME()>last_action FROM `account` WHERE `id`='$userid' provest v phpmyadminu a když aktuánl čas byl menší jak last_action tak se vrátilo hodnota 1 a kdyý aktuální čas byl větší jak last_action tak se vrátila hodnota 0 ps: nějak jsem tě nepochopil můžeš mi ukázat jak si to myslel? |
||
Aleš Janda Profil |
#4 · Zasláno: 27. 5. 2007, 20:39:35
No jo, ale ty nečteš co ti to vrátí, ale pouze "numrows" - počet vrácených řádků.
Myslel jsem to takhle: $sql_time_check = $db->sql_query("SELECT id FROM `account` WHERE `id`='$userid' AND CURTIME()<last_action"); Apropó, při tomhle vkládání hodnot do SQL $userid = $cookie_read[0]; $sql_time_check = $db->sql_query("SELECT CURTIME()<last_action FROM `account` WHERE `id`='$userid'"); se mi otevírá kudla v kapse. Je to chyba "SQL injection", někdo ti podstčí do cookie co chce a ty to "jen tak" neošetřené dáš přímo do SQL dotazu. A to není žádné sci-fi, třeba já když chci udělat něco, co mi nějaká stránka nedovolí, tak první co zkusím, je právě podvržení hodnot do SQL. A tak v půlce případů se mi to podaří :-) Zatím jsem ale nikomu databázi nesmazal ;-) |
||
World Profil |
#5 · Zasláno: 27. 5. 2007, 21:11:44
díky, nějak si s tim pohraju...
|
||
World Profil |
#6 · Zasláno: 28. 5. 2007, 12:41:34
takže nejlepší možnost je cookie nahradit session a session ID ukládat třeba do databáze?
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0