Autor | Zpráva | ||
---|---|---|---|
Anonym Profil * |
#1 · Zasláno: 17. 11. 2011, 23:23:44
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 |
#2 · Zasláno: 17. 11. 2011, 23:38:18
Anonym:
Ak session nema nastavenu platnost, po zavreti prehliadaca sa zmaze. |
||
Joker Profil |
#3 · Zasláno: 18. 11. 2011, 08:00:52
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 * |
#4 · Zasláno: 18. 11. 2011, 11:49:50
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 |
#5 · Zasláno: 18. 11. 2011, 12:02:27
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 * |
#6 · Zasláno: 18. 11. 2011, 12:09:39
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 |
#7 · Zasláno: 18. 11. 2011, 12:41:14
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 * |
#8 · Zasláno: 18. 11. 2011, 13:19:12
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 |
#9 · Zasláno: 18. 11. 2011, 13:56:45
Anonym:
Porovnas aktualny cas s tym co je v DB, nic zlozite... |
||
Anonym Profil * |
#10 · Zasláno: 18. 11. 2011, 14:07:18
tak ale co mám porovnávat? Aktuální čas nebo čas před např. 5min?
|
||
Joker Profil |
#11 · Zasláno: 18. 11. 2011, 14:57:21
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 * |
#12 · Zasláno: 18. 11. 2011, 16:12:47
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 :) |
||
Časová prodleva: 3 dny
|
|||
Anonym Profil |
#13 · Zasláno: 21. 11. 2011, 16:05:38 · Upravil/a: Anonym
Už jsem na to asi přišel :)
|
||
Anonym Profil |
#14 · Zasláno: 21. 11. 2011, 16:35:15
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 |
#15 · Zasláno: 21. 11. 2011, 16:40:54
Omlovám se za zmatky, mám to... :)
|
||
Časová prodleva: 12 let
|
0