ďťż

[PHP] Lista osób online j.w.

       

Podstrony


telcocafe

Problem wygląda następująco : mam sobie bazę MySQL z danymi użytkowników (login, hasło , ranga, ID). Mam skrypt do logowania wykorzystujący cookies przechowujące ID użytkownika (ewentualnie mogę to zastąpić sesjami :P ). I teraz pojawia się problem : chciałbym wiedzieć kto jest a kogo aktualnie (tzn w momencie odświeżenia strony) nie ma na stronce. Jak to można sprawdzić bo uznałem że nie każdy od razu się wyloguje po każdym wyjściu ze stronki (co by ułatwiło sprawę). Chodzi mi o samą propozycję rozwiązania problemu bo nie mam pomysłu :( Kod sam napiszę :) .Pozdro ;)



Stworzyc mechanizm sesji.

Tabela w MySQL z zapisem sesji czyli czas rozpoczecie, id sesji, ip sesji i id uzytkownika.

Ustawic czas aktywnosci sesji i ewentualnie kasowac nieuzywane sesje czylli te ktore nie sa uzywane(obliczac za pomoca czasu). :P

Bardzo ciekawy artykul o mechanizmach sesji
http://webcity.pl/we...tykuly.php/t/55
Użytkownik m_uli edytował ten post 09 listopad 2005, 07:06
<?php $ctime = time(); $osel = mysql_query("select lpv, id, user, rank from players"); while ($online = mysql_fetch_array($osel)) { $span = ($ctime - $online['lpv']); if ($span <= 180) {                if ($online['rank'] == 'Admin') {   print "<img src=\"images/admin.gif\" ALT=\"Admin!\"><A href=\"view.php?view=".$online['id']."\">".$ online['user']."</a> (".$online['id'].")<br>";  } else {   print "<A href=\"view.php?view=".$online['id']."\">".$ online['user']."</a> (".$online['id'].")<br>";  } } } ?>

O cos takiego ci chodzi ??

Już mniej więcej wiem jak to zrobić tylko szkoda ,źe powstaje mały problem bo w obu podanych przykładach niestety wiadomo tylko orientacyjnie kto jest na stronce (ustalane poprzez czas "źycia" sesji). Czy wie ktoś czy nie dałoby się tego jakoś ominąć (tzn. źeby moźa było wiedzieć czy dany user rzeczywiście miał w momencie odświeżenia stronki otworzoną stronkę :rolleyes: ). Ale i tak dzięki z apomoc bo prawdopodobnie wykorzystam to co napisaliście jeśli nie znajdę lepszego rozwiązania ;). Pozdro ;)



Możesz też zrobić, że przy zalogowaniu, do pliku tekstowego lub bazy danych (jak wolisz) dodawana jest nazwa użytkownika i czas, a skrypt wyświetla tylko tych użytkowników, którzy byli dopisani nie więcej niż np 3 minuty temu i kasuje wcześniejsze wpisy. Oczywiście może wyśietlić tylko raz jednego użytkownika. Mam nadzieję, że w miare jasno to wytłumaczyłem :)
Użytkownik SZySZeC edytował ten post 09 listopad 2005, 14:15

Możesz też zrobić, że przy zalogowaniu, do pliku tekstowego lub bazy danych (jak wolisz) dodawana jest nazwa użytkownika i czas, a skrypt wyświetla tylko tych użytkowników, którzy byli dopisani nie więcej niż np 3 minuty temu i kasuje wcześniejsze wpisy. Oczywiście może wyśietlić tylko raz jednego użytkownika. Mam nadzieję, że w miare jasno to wytłumaczyłem

No wiem o co chodzi :) tylko tenże skrypt ma takie samo ograniczenie jak wcześniej opisane metody. Ale powoli zaczynam się obawiać ,że nie da się zrobić tego jakoś inaczej tlyko własnie tak :(
Użytkownik .:DzIuDek:. ™ edytował ten post 09 listopad 2005, 16:28

No wiem o co chodzi :) tylko tenże skrypt ma takie samo ograniczenie jak wcześniej opisane metody. Ale powoli zaczynam się obawiać ,że nie da się zrobić tego jakoś inaczej tlyko własnie tak :(

No nie wiem... Naczy: w HTML jest coś takiego jak <body onunload="XXX"> i to chyba wykonuje rzecz podaną w nawiasie, przy wyjściu ze strony. Nigdy nie próbowałem. Ale gdybyś dał w nawiasy link do funkcji wylogowywującej, np. <body onunload="index.php?funkcja=MarCynks"> Nie wiem czy nie pomyliłem z tym w nawiasach (co do podania funkcji), bo jeszcze PHP dobrze nie znam...


No nie wiem... Naczy: w HTML jest coś takiego jak <body onunload="XXX"> i to chyba wykonuje rzecz podaną w nawiasie, przy wyjściu ze strony. Nigdy nie próbowałem. Ale gdybyś dał w nawiasy link do funkcji wylogowywującej, np. <body onunload="index.php?funkcja=MarCynks"> Nie wiem czy nie pomyliłem z tym w nawiasach (co do podania funkcji), bo jeszcze PHP dobrze nie znam...

Co do tej funkcji onunload masz rację tylko jest mały problem - są z nią problemy jesli użytkownik zamknie przeglądarkę bo to zdarzenie jest wywoływane z tego co wiem wtedy gdy zmieniasz adres strony na inny. Testowałem juz to rozwiązanie i sie nie do końca niestety sprawdziło :( .

Aha. a swoją drgoą: kdybyś znalazł jakiś dobre rozwiązanie to napisz na forum, bo mnie też sięprzyda. Nie wiem, czy dobrze mówie, ale jeśli znasz się na PHP, to czy niedałoby się zrobić czegoś, co co jakiś czas(na przykład co 10 minut) wysyłałoby jakieś dane do przeglądarki, i jeśli otrzyma odpowiedź jest OK., a jak nie to kasuje usera z listy... Ja się na PHP nie znam, także nie śmiej się...

MarkCynks - samo php nie wyśle bez wywołania, gdyby się dało to by pytania nie było :P
Co do onunload - to nie jest php :) Ale powinno też chodzić jak wyłączasz okno przeglądarki, nie tylko jak zmieniasz adres - zrób sobie np<body onunload='javascript:alert("na razie")' />


Aha. a swoją drgoą: kdybyś znalazł jakiś dobre rozwiązanie to napisz na forum, bo mnie też sięprzyda. Nie wiem, czy dobrze mówie, ale jeśli znasz się na PHP, to czy niedałoby się zrobić czegoś, co co jakiś czas(na przykład co 10 minut) wysyłałoby jakieś dane do przeglądarki, i jeśli otrzyma odpowiedź jest OK., a jak nie to kasuje usera z listy...

Ja to na stronce która robię widze tak : gdy user się zaloguje w bazie jest zmieniany wpis o stanie zalogowania na 1 (z zera) (wykorzystuję bazę żeby darować sobie cookies a poza tym pozwala to na nieograniczony czas bycia zalogowanym). Następnie jest wysyłane cookies do usera o jakiejś tam nazwie i w momencie jego wsyłanai jest do bazy wpisywany czas jego wysłania. Po każdym odświerzeniu strony (czyli każdym wywołaniu skryptu) skrypt sprawdza czy różnica pomiędzy aktualnym czasem i czasem wysłania poszczególnych cookies nie jest większa niż ustalony limit (myślę ,że 15 minut to rozsądna granica). Jeżeli gdzieś limit zostal przekroczony to użytkownika wyrzuca z bazy. Teraz żeby aktualizować status zalogowanych i obecnych na stronie po każdym odświeżeniu jest oczywiście wysyłane cookies jeśli go nie ma ,jesli jest to pobierane jest ID usera i aktualizowany jest wpis z czasem jego obecności, jeśli nie ma cookies to dodawany jest wpis do owej bazy z czasem. To chyba wszystko :)


Ja się na PHP nie znam, także nie śmiej się...

Niby dlaczego miałbym się śmiać ,że ktoś nie umie php :> Jakbyś mnie tu pytał jak zwiekszać wartość zmiennej o jeden w tymże języku to i tak bym nie mógł sie z ciebie śmiać z Twojego "nieumienia" tylko nieczytania regulaminu :)


MarkCynks - samo php nie wyśle bez wywołania, gdyby się dało to by pytania nie było
Co do onunload - to nie jest php  Ale powinno też chodzić jak wyłączasz okno przeglądarki, nie tylko jak zmieniasz adres - zrób sobie np
KOD
<body onunload='javascript:alert("na razie")' />


Ekhmm mi jakoś nie działało w niektórych sytuacjach i na różnych przeglądarkach , mimo że jest to jakieś rozwiązanie to obawiam sie o jego kompatybilność i działanie :)

Pozdro ;)
Użytkownik .:DzIuDek:. ™ edytował ten post 10 listopad 2005, 19:22

Ekhmm mi jakoś nie działało w niektórych sytuacjach i na różnych przeglądarkach , mimo że jest to jakieś rozwiązanie to obawiam sie o jego kompatybilność i działanie :)

Pozdro ;)


Na pewno nie będzie działało na tych z wyłączoną obsługą js  Jedynym wyjściem jest tak jak na forach "zalogowani użytkownicy w ciągu ostatnich X minut"... Ale onunload możesz użyć równocześnie z tym, co zwiększy skuteczność
Np na Operze mi to nie działa jak zamykam panel ,a mam włączoną js :>
Co do firefoxa i explorera to to działa ale kto mi da gwarancję ,że ktosnie używa Opery i ,że zaraz po obejrzeniu stronki nie będzie szedł spać i zamknie panel :) .Pozdro ;)
Użytkownik .:DzIuDek:. ™ edytował ten post 10 listopad 2005, 19:31

Niby dlaczego miałbym się śmiać ,że ktoś nie umie php :> Jakbyś mnie tu pytał jak zwiekszać wartość zmiennej o jeden w tymże języku to i tak bym nie mógł sie z ciebie śmiać z Twojego "nieumienia" tylko nieczytania regulaminu :)


A co, na tym forum nie można się pytać jak zwiększyć zmienną o jeden??? W ogóle troche tu dziwne zasady tu panują...

Nie dziwne tylko racjonalne. Bo gdyby można się było pytać o rzeczy ,które można znaleźć dosłownie wszędzie (nie mówiąc o googlach) to każdy z najmniejszym problemem by przychodził na forum ograniczając w ten sposób szanse na uzyskanie odpowiedzi osób z naprawdę nietypowymi problemami (a zwiększanie zmiennej o jeden to nie jest jakiś wielki problem).


A gdyby ustawić automatyczne odświeżanie np. co 10 minut, i w <body onload="XXX"> dać adres skryptu czyszczącego baze danych, i (po wyczyszczeniu) zapisującego w niej nazwę użytkownika??? Potem już tylko w którejś części strony wyświetlasz te dane z bazy. No nie wiem czy będzie działać, wczoraj wieczorem nawet jeszcze o tym myślałem...

To ma taką samą skutecznoć jak poprzednie skrypty (tam też mogę zrobić ,że co 10 minut się baza czyści). Pozdro ;)

No nie wiem. To podglądnij kod jakiejś strony która to ma. Ja widzę, że w tym temacie się do niczego nie nadam.

Niech mi ktoś powie po co czyścić baze co n minut, to mija się z celem. Lepszym wyjściem jest czyścić bazę dobiero przy wejściu usera na strone (ew. uwzględniając jakieś rozsądne przerwy). Dlaczego? Dlatego że to jest najdokładniejsze i najprostsze. Użytkownik nie będzie paprał się w JS. W bazie będą zawsze aktualne dane... a przy okazji można łatwo zrobić z tego logi :)

IMHO nie ma co się bawić w jakieś onunload itp... skomplikuje to tylko sprawę. Co to za różnica czy człowiek jest czy aktualnie sobie poszedł, ważne że niedawno był i można to pokazać. Jeżeli na prawdę ważne jest sprawdzanie bycia on-line w czasie rzeczywistym, to jest to znacznie bardziej skomplikowane, a czasem wręcz nie możliwe (w czystym HTML i PHP), bo HTTP jest protokołem bezstanowym. Możnaby pokusić się o użycie appletu Javy , który średnio raz na kilka sekund wysyłałby coś ala PING do serwera, jednak byłoby to dosyć znaczne obciążenie.


Niech mi ktoś powie po co czyścić baze co n minut, to mija się z celem. Lepszym wyjściem jest czyścić bazę dobiero przy wejściu usera na strone (ew. uwzględniając jakieś rozsądne przerwy). Dlaczego? Dlatego że to jest najdokładniejsze i najprostsze. Użytkownik nie będzie paprał się w JS. W bazie będą zawsze aktualne dane... a przy okazji można łatwo zrobić z tego logi :)

IMHO nie ma co się bawić w jakieś onunload itp... skomplikuje to tylko sprawę. Co to za różnica czy człowiek jest czy aktualnie sobie poszedł, ważne że niedawno był i można to pokazać. Jeżeli na prawdę ważne jest sprawdzanie bycia on-line w czasie rzeczywistym, to jest to znacznie bardziej skomplikowane, a czasem wręcz nie możliwe (w czystym HTML i PHP), bo HTTP jest protokołem bezstanowym. Możnaby pokusić się o użycie appletu Javy , który średnio raz na kilka sekund wysyłałby coś ala PING do serwera, jednak byłoby to dosyć znaczne obciążenie.

A może w dziale "o forum" spytaj się jak zrobione jest to ilu użytkowników czyta temat... Tam są aktualne dane - pokazuje ilu gości, ilu zarejestrowanych, to może twórcy tego forum albo jego admini będę wiedzieli co nieco :P


A może w dziale "o forum" spytaj się jak zrobione jest to ilu użytkowników czyta temat... Tam są aktualne dane - pokazuje ilu gości, ilu zarejestrowanych, to może twórcy tego forum albo jego admini będę wiedzieli co nieco :P


Co do twórców to raczej nie na tym forum... a jak coś to proponuje samemu podejrzeć kod dowolnego forum z podobną opcją.

Ostatnio czytając na innych forach posty osób z podobnym problemem doszedłem do wniosku ,że jednak jedynym rozwiazaniem jest po prostu aktualizowanie listy obecnych osób na podstawie ich aktywności na stronie. W IPB też tak jest prawdopodobnie ponieważ są nawet błędy w wyświetlaniu stanu osób (np. przeglądam post na swoim koncie ,patrzę a stan mam na 'off' :lol: ), gdyby to było bardziej dokładne takie błędy by się nie pojawiały. Myśle ,że chyba nie ma niestety lepszej metody sprawdzania stanu użytkowników . Pozdro ;)

Taa, też czasami mam off, ale chodziło mi o to, że jak coś czytasz, to pod przyciskami "szybka odp., odpowiedz,..." jest podane ile osób czyta i to jest nawet dokładne! :>


Taa, też czasami mam off, ale chodziło mi o to, że jak coś czytasz, to pod przyciskami "szybka odp., odpowiedz,..." jest podane ile osób czyta i to jest nawet dokładne! :>

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.