Autor | Zpráva | ||
---|---|---|---|
regvac Profil * |
#1 · Zasláno: 16. 7. 2008, 08:51:11
Ahoj,
mohl by mi někdo poradit, jak zjistit, že je nějaký uživatel přihlášen. Mám na stránkách diskuzi (chat) a chtěl bych, aby ostatní věděli, kdo je právě přihlášen online. Mám stránky, na které se musí každý uživatel přihlásit přes jméno a heslo. Seznam uživatelů mám v MySql tabulce definované se sloupci (id,jmeno,heslo,status). Pokud se uživatel přihlásí, tak se jeho status změní na online) a zároveň to zapíše do jiné databáze čas přihlášení a jméno uživatele. Ze stránek se také odhlašuje přes tlačítko, na které je navázána funkce, které změní status na offline. Problém je ale u tohoto "amatérského" řešení v tom, že pokus se uživatel takto neodhlásí, zůstane jeho status stále online, i když už brouzdá někde jinde. Postačí mi kontrolovat, zda je někde na stránkách, konkrétní stránku zjistit nepotřebuji (šlo by to vůbec?). Jakou funkcí na to? Moc dík |
||
Joker Profil |
#2 · Zasláno: 16. 7. 2008, 08:58:52
regvac
Obvykle se to dělá tak, že se uloží čas poslední aktivity a online uživatel se změní na offline buď tím, že se odhlásí, nebo je určitý čas neaktivní. Šlo by udělat samozřejmě i jiná řešení, například pomocí AJAX, klientský skript by mohl v pravidelných intervalech posílat jakýsi "ping" na server. Muselo by to ale nějak řešit vypnutý Javascript a podobně. |
||
regvac Profil * |
#3 · Zasláno: 16. 7. 2008, 09:06:00
A jak se zjistí, zuda je určitý čas neaktivní?
|
||
regvac Profil * |
#4 · Zasláno: 16. 7. 2008, 09:06:36
A jak zjistím, že je nějaký čas neaktivní?
|
||
Joker Profil |
#5 · Zasláno: 16. 7. 2008, 09:09:48
Při každé návštěvě nějaké stránky se aktualizuje čas poslední aktivity a při výběru online uživatelů se jednoduše vezmou ti, jejichž čas poslední aktivity je větší, než teď mínus něco.
|
||
deter Profil |
#6 · Zasláno: 16. 7. 2008, 11:11:12
regvac: já to mám uděláno takto: ve sloupci cas mám čas jeho poslední aktivity (v timestampu) a dotaz, který vypíše jen uživatele, kteří byli aktivní v posledních deseti minutách (600 vteřin) vypadá takto:
SELECT * FROM users WHERE cas BETWEEN UNIX_TIMESTAMP()-600 AND UNIX_TIMESTAMP() |
||
Časová prodleva: 16 let
|
0