Autor Zpráva
Anonym
Profil *
Dobrý den chtěl jsem se zeptat jak zrušit SESSION['online']. Když se uživatel přihlásí dám mu takhle session(SESSION['online']=true;) a když zmáčkne tlačítko odhlásit tuto session zničím (session_destroy()), ale nevím co mám dělat když uživatel pouze vypne okno, nebo prohlížeč...
Všem moc děkuji za odpověd :)

btw. kdyby jste mi mohli pořádně říct jak by se dalo session narušit nebo jak ho zabezpečit atd. (moc tomu nerozumím), na začátku mám pouze to session(SESSION['online']=true; a to se mi zdá nějaké nezabezpečené :)
pcmanik
Profil
Anonym:
Ak session nema nastavenu platnost, po zavreti prehliadaca sa zmaze.
Joker
Profil
ad pcmanik, respektive po zavření prohlížeče se potenciálně smaže session cookie. Přes GET (adresa-stránky?phpsessid=něco) by to fungovalo dál.

Ovšem session se mažou i samy po určité době neaktivity, ve výchozím nastavení tuším že po 20 minutách.
Což se může stát i když návštěvník třeba čte delší článek: Dočte, klikne a kouká, že je odhlášený.
Anonym
Profil *
pcmanik, Joker:
Když se tedy mažou, mohli byste mi prosím vysvětlit proč nefunguje tento kus kodu:
$username = $_SESSION['username'];
if($username!="")
{
  $online = 1;
}
else
{
  $online = 0;
}

if($online==1)
{
$updateonline = mysql_query("UPDATE online SET online='1' WHERE id='$id'");
}

if($online==0)
{
$deleteonline = mysql_query("UPDATE online SET online='0' WHERE id='$id'");
}
jenikkozak
Profil
Anonym:
Co na něm „nefunguje“?
Jen příliš nechápu, proč tam máš tolikanásobné porovnávání.
if(isset($_SESSION['username'])){
mysql_query("UPDATE online SET online=1 WHERE id=$id");
$online=1; //Pokud tuto proměnnou někde níže použiješ.
}else{
mysql_query("UPDATE online SET online=0 WHERE id=$id");
$online=0; //Pokud tuto proměnnou někde níže použiješ.
}
Anonym
Profil *
jenikkozak:
no nefunguje tam právě to, že když uživatel vypne prohlížeč, tak zůstane v online pořád ta hodnota 1
jenikkozak
Profil
Anonym:
tak zůstane v online pořád ta hodnota 1
Ve sloupci „online“ v databázi?
Je poměrně logické, že tam zůstane jednička, server se nedoví, že uživatel okno zavřel.
Lepší bude ukládat si čas poslední akce uživatele do databáze a před vypsáním počtu uživatelů online prohlédnout ty, kteří mají v databázi ve sloupci „online“ jedničku, jestli čas od jejich poslední aktivity není delší než např. 10 minut. V takovém případě můžeš do databáze zapsat nulu a považovat uživatele za odhlášeného. Pokud on sám vykoná nějakou akci, do databáze se do sloupečku „online“ k jeho jménu vrátí jednička.
Anonym
Profil *
jenikkozak:
děkuji to za radu, nemohl by si mi prosím tě ještě poradit, jak porovnávat ty čas, vůbec nevím jak na to...
pcmanik
Profil
Anonym:
Porovnas aktualny cas s tym co je v DB, nic zlozite...
Anonym
Profil *
tak ale co mám porovnávat? Aktuální čas nebo čas před např. 5min?
Joker
Profil
Anonym:
tak ale co mám porovnávat?
Z tabulky se vyberou záznamy, kde čas poslední aktivity je v posledních n minutách.
Pokud jde o MySQL, tak tady hned první příklad na té stránce ukazuje jak vybrat záznamy za posledních 30 dní. Analogicky lze vybrat záznamy za posledních n minut.
Anonym
Profil *
Joker:
Vytvořil jsem něco takovýho, ale nějak to nefunguje... asi tomu fakt nerozumím.
$minute = mysql_query("SELECT * FROM online WHERE DATE_SUB(date, INTERVAL 1 MINUTE) AND id!='$id'");
while ($online_info = mysql_fetch_array($minute))
{
$online_id = $online_info['id'];
echo $online_id;
}
prosím pomozte mi :) Všem moc děkuju :)
Anonym
Profil
Už jsem na to asi přišel :)
Anonym
Profil
Omlouvám se ale tak ne...
skončil jsem s tímto kodem... ale nevim jak udělat aby se to pořád opakovalo a kontrolovalo to pořád
if(isset($_SESSION['username'])){
mysql_query("UPDATE online SET online='1', date='$date' WHERE id='$id'");
}else{
mysql_query("UPDATE online SET online='0' WHERE id='$id'");
}

$select_on = mysql_query("SELECT * FROM online WHERE id='$id' AND date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MINUTE) AND NOW()");
$result_on = mysql_num_rows($select_on);
if($result_on==0){
mysql_query("UPDATE online SET online='0' WHERE id='$id'");
}
Anonym
Profil
Omlovám se za zmatky, mám to... :)

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:

0