Autor Zpráva
World
Profil
Č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
$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
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
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
díky, nějak si s tim pohraju...
World
Profil
takže nejlepší možnost je cookie nahradit session a session ID ukládat třeba do databáze?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0