Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kto jest online, jaki algorytm
Avatarus
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


Witam
Jak najbardziej optymalnie zrobić moduł do pokazywania kto jest online z zalogowanych userów?
Mam skrypt logowania. Tylko nie wiem zbytnio jak zapisać w nim dane o tym czy user jest online czy nie.

Jak się to robi profesjonalnie i w miarę optymalnie żeby bazy nie zabić duża ilością zapytań.

Dzięki


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
flashdev
post
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Jak już masz bazę danych z userami i tylko ich chcesz podliczać, to dodaj do bazy komórkę TIMESTAMP, która będzie się update`owana aktualnym czasem przy każdych odwiedzinach usera.
Następnie przyjmujesz orientacyjnie średni czas przez jaki user jest na stronie np. 5 min i w miejscu gdzie chcesz wyświetlić licznik wyciągasz z bazy danych wszystkich userów, którzy byli w ciągu tych ostatnich przykładowych pięciu minut.


--------------------
Go to the top of the page
+Quote Post
Avatarus
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


no tak myślałem o tym ale to by wymagało robienia tego updata za każdą najprostszą akcją na stronie.
Nie ma innej opcji?


--------------------
Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(Avatarus @ 15.08.2010, 17:13:18 ) *
no tak myślałem o tym ale to by wymagało robienia tego updata za każdą najprostszą akcją na stronie.
Nie ma innej opcji?


Powiedz najpierw w czym chcesz lepszą opcję, bo ja znam gorszą (bardziej obciąża serwer), ale może Tobie bardziej się spodoba, bo działa dokładniej.

Chodzi o to, że możesz dorzucić do strony skrypt, który przy pomocy ajaxa co minutę lub częściej będzie dawał o sobie znać, że user jeszcze jest na stronie. Będziesz miał dokładniejsze wyniki, jeśli o to chodzi?


--------------------
Go to the top of the page
+Quote Post
darophp
post
Post #5





Grupa: Zarejestrowani
Postów: 309
Pomógł: 20
Dołączył: 13.02.2010
Skąd: Kęty

Ostrzeżenie: (0%)
-----


Ja pisałem kiedyś takie coś i mam zrobione tak:
- osobną tabelę "zalogowani"
  1. CREATE TABLE `zalogowani` (
  2. `login` varchar(50) NOT NULL,
  3. `data` datetime NOT NULL,
  4. PRIMARY KEY (`login`)
  5. )

- oczywiście łączenie i do sesji zapisuje login użytkownika
- następnie zapytanie i wstawiam użytkownika do tabeli
  1. $_SESSION['login']=$login;
  2. mysql_query("INSERT INTO zalogowani SET login='{$_SESSION['login']}', data=NOW()");

- tam gdzie ma być wylogowanie użytkownika, ten kod:
  1. mysql_query("DELETE FROM zalogowani WHERE login='{$_SESSION['login']}'");

- tam gdzie chcesz śledzić usera
  1. if ($_SESSION['login']) {
  2. mysql_query("REPLACE INTO zalogowani SET login='{$_SESSION['login']}', data=NOW()");
  3. }

- tam gdzie chcesz wyświetlić użytkowników
  1. mysql_query("DELETE FROM zalogowani WHERE data<DATE_SUB(NOW(),INTERVAL 15 MINUTE)");
  2. $wynik = mysql_query("SELECT * FROM zalogowani ORDER BY login");
  3. if ($wynik) {
  4. echo "Zalogowani użytkownicy: ";
  5. while($dane=mysql_fetch_assoc($wynik)) {
  6. if (++$i>1) echo ", ";
  7. echo "{$dane[login]}";
  8. }
  9. }
  10. }


No ... w sumie napisałem Ci wszytko, powinno działać smile.gif


--------------------
Fotografia, projektowanie stron WWW | web-coding.pl - HTML 5 i CSS 3 - już w krótce ;)
Go to the top of the page
+Quote Post
Avatarus
post
Post #6





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

Ostrzeżenie: (0%)
-----


no tak, juz zrobiłem zgodnie z 1 wskazówką.
Mam funkcję która odpala się zaraz po nagłówku strony i jeśli jest ustalone session[id] to w tabeli kont userów updatuje wartość pola online.
Dzięki za wskazówki


--------------------
Go to the top of the page
+Quote Post
flashdev
post
Post #7





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(Avatarus @ 15.08.2010, 21:21:56 ) *
no tak, juz zrobiłem zgodnie z 1 wskazówką.
Mam funkcję która odpala się zaraz po nagłówku strony i jeśli jest ustalone session[id] to w tabeli kont userów updatuje wartość pola online.
Dzięki za wskazówki


Pewnie dalej czujesz niedosyt i szukasz czegoś takiego.
Po wywołaniu zdarzenia otworzyć nowe okno przegladarki, które powiadomi php/sql, że user wyszedł. No i nie trzeba będzie za każdym razem robić tego nieszczęsnego update`u bazy.
Niestety to nie zawsze zadziała. Przeglądarki blokują okienka, javascript nie wszędzie jest włączony. Nie można polegać na takich rozwiązaniach więc nie masz co szukać lepszego winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:34