Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Online
Forum PHP.pl > Forum > Przedszkole
Johnas
Witam zastanawiam się jak zrobić funkcje online. Myślałem nad zrobieniem tabeli online i tam id usera = $_SESSION['id'] oraz czy jest online czy też nie (1/0)... To było by nawet proste ale jak zrobić aby po 5 minutach nieaktywności zmieniła się wartość na off i jak sprawdzać aktywność? na każdej stronie robić update table ? Widziałem tutaj jeden artykuł ale był słabo opisany... Pozdrawiam
askone
Hej

Wydaje mi się, że właściwym rozwiązaniem będzie wykorzystanie tabeli "users" w której powinieneś utworzyć kolumnę "lastactivity" typu [timestamp]. Wtedy w funkcji sprawdzającej czy użytkownik jest zalogowany dodatkowo aktualizowałbyś tę dane w tej kolumnie dla tego użytkownika. Wtedy aby pobrać liczbę bądź nazwy użytkowników aktywnych w czasie ostatnich 5 minut wystarczy dać:

pseudokod:
Kod
SELECT * FROM `users` WHERE `lastactivity` <= NOW() - 5minut


Pozdrawiam
thek
Pomysł dobry, ale zapytanie nieoptymalne smile.gif Coś takiego jak now() nie powinno być używane bo zmniejsza wydajność. Zapytanie powinno mieć wklejany czas już po stronie php, by baza nie musiała tego liczyć. Poza tym co z userami, którzy wylogowali się w czasie poniżej 5 minut i na bank nie są on-line? Tutaj musi być dodatkowa kolumna oprócz czasu jeszcze. Bo może być timestamp poniżej 5 minut, ale online wskaże 0 czyli wylogowany.
tomahawk
No a co ma wskazywać że zalogowany skoro się wylogował?
Greg0
Rozwiązanie prymitywne ale działa. Musisz posiadać dodatkowe dwie kolumny tak jak wyżej napisano już lastactive oraz online

  1.  
  2. $timeout = time()-(60*5); //czas 5minut
  3. $wywal_nieaktywnego = mysql_query("UPDATE `users` SET online='0' WHERE lastactive < $timeout"); //ustawia online na 0 osobom nieaktywnym przez 5 minut, nieaktywnym=nieodświeżającym strony
  4. $lastactive = mysql_query("UPDATE `users` SET lastactive='time()' WHERE id='$id'"); //ustawienie czasu przy wywołaniu skryptu
  5.  


I przy wylogowaniu użytkownika też powinieneś ustawić kolumnę online na 0.
Potem aby wyświetlić ludzi będących online pobierasz wszystkich użytkowników mających online=1
Skrypt wiąże się z dużą ilością zapytań.
Poprawiajcie mnie do woli ;]
Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.