Switch to full style
Forum dyskusyjne poświęcone zagadnieniom związanym z tworzeniem serwisów z wykorzystaniem zaawansowanych technologii takich jak PHP, Perl, mySQL, ASP, CGI, XML, itp.
Odpowiedz

pokazywanie zalogowanych uzytkownikow

28 stycznia 2005, o 23:48

za pomoca jakiego skryptu mozna wyswietlic uzytkownikow aktualnie zalogownaych na stronie, dodam ze podczas logowania uzyte sa sesje.

pokazywanie zalogowanych uzytkownikow

29 stycznia 2005, o 00:16

na stronie bastka lub ygrega byl kiedys skrypt do zliczania zalogowanych
najprosciej zamiast szukac, napisac wlasny

tablica:
id autoinc
id_usera int
zalogowany time

kazde wejscie na strone spowoduje:
a) insert do tabeli jesli id_usera nie jest wpisane
b) update zalogowany, jesli id_usera juz bylo w tabeli
c) delete jesli zalogowany < time() - 5*60 (czyli zalogowany pozniej niz 5 minut temu i od tego czasu nic nie otwieral)

edit:
na koniec rzecz jasna mozesz select count(*) lub select nick i wyswietlic odpowiednie dane na ekranie

pokazywanie zalogowanych uzytkownikow

29 stycznia 2005, o 13:41

jak czytam wydaje sie byc to logiczne, aleza bardzo nie wiem jak to wykonac;)

pokazywanie zalogowanych uzytkownikow

2 lutego 2005, o 00:22

to jak januzi napiszesz dokladniej jak to zrobic?

pokazywanie zalogowanych uzytkownikow

2 lutego 2005, o 12:20

O, ja mam pytańco w temacie.

Przedstawię dwa schematy działania takiego skryptu, różniące się deczko - czy możecie mi powiedzieć, który Waszy zdaniem będzie wydajniejszy?

Schemat bazy (MySQL):
id - int, autoincrement
active - tinyint (0 lub 1)
last_visit - datetime

Wersja I. - taka jak Januzi podał (pole active w bazie tu nie jest potrzebne)
User wyświetla stronę:
a. znane ID - update last_visit
b. nie znane ID - tworzony jest nowy rekord, zwracane ID
c. usuwamy rekordy, gdzie różnica czasu np. < time() - 5*60
d. wyświetlamy select count(*) jako ilość userów
Uwagi: ID zwracane przy pierwszej wizycie trzymamy gdzieś (sesja?, cookie?), a ponieważ deletujemy stare rekordy (pkt. c) to w punkcie a należy sprawdzić czy rekord o danym ID istnieje - troszkę się nam skrypt rozrasta.

Wersja II.
User wyświetla stronę:
a. znane ID - update last_visit, set active = 1
b. nie znane ID - tworzony jest nowy rekord, (active = 1), zwracane ID, ustawiamy cookie
c. update na rekordy, gdzie różnica czasu np. < time() - 5*60 - set active = 0
d. wyświetlamy select count(*) where active = 1 jako ilość userów
Uwagi: ID zwracane przy pierwszej wizycie trzymamy w cookie, nic nie deletujemy więc nie musimy sprawdzać czy rekord o danym ID istnieje. Jednak można przypuszczać, że tabelka szybko będzie "pęcznieć", choć myślę, że większa część userów nie czyści cookie, więc powracając nie będzie dokładała nowych rekordów.

Jak myślicie który skrypt będzie wydajniejszy? Jak widać cały ciężar spoczywa na bazie. Zaznaczam, że nie jest problemem objętość bazy, więc ten argument odpada - choć pozostaje pytanie: czy i jak ilość rekordów wpływa na wydajność? Chętnie usłyszę Wasze opinie, pozwoli mi to zweryfikować moje przemyślenia na ten temat.

A może trzymać w cookie jeszcze last_visit? I w zależności od tego INSERT lub UPDATE?

EDIT: oczywiście pole active jest nie potrzebne w ogóle - nie muszę updatować tej flagi tylko wyciągać users online przez: count(*) where różnica last_visit i now() < 5 minut. Mi to potrzebne do czego innego.

EDIT2: Robię test - puściłem - do jutra - wersję bez deletowania, ale już widzę, że to nie ma sensu - po godzinie mam ponad setkę rekordów, które do niczego nie są potrzebne... Tak więc chyba sam sobie odpowiedziałem... :mrgreen: Hehe.
Odpowiedz