Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]ip online
Forum PHP.pl > Forum > Przedszkole
shreker
potrzebuję wyświetlić ip wszystkich użytkowników będących online, dla jednego jest to proste, ale jak to zrobić dla wielu ?
jacobson
Sadze ze dla wielu bedzie wygladalo w 99% tak samo jak dla jednej. Osoba zarejestrowana wpisywana jest do bazy danych do tablicy np "zalogowani" (a po wylogowaniu kasowana). I nastepnie nalezy wyswietlic wszystkie ip.
shreker
nie chodzi mi tylko o zalogowanych użytkowników będących online, ale o wszystkich użytkowników online będących w danej chwili
jacobson
Hmmm no prawda to jest ciezka sytuacja jednak zarowno dla jednej jak i dla wiekszej ilosci osob, poniewaz musisz okreslic warunki tego czy uzytkownik jeszcze jest na stronie. Np jezeli nie poruszal sie po podstronach przez 2 minuty znaczy ze juz go tam nie ma i mozna go usunac. Wydaje mi sie ze moznaby to zrobic tak samo jak mowilem wczesniej z tym ze skrypt ktory dziala caly czas. Przy kazdej akcji sie wykonuje. Uzytkownik wchodzi na strone i jego ip zostaje wpisane do sesji razem z jakims timestampem. Kazda operacja uzytkownika "odnawia" jego timestamp na aktualny.
Ja to widze mniej wiecej tak. W taki sam sposob mozna tylko na bazie (ale wedlug mnie takie operacje beda troche obciazajace bez przerwy monitorowac ozytkownikow)
shreker
może ktoś gdzieś się spotkał z podobnym problemem, ewentualnie natknął się na podobne skrypty, rozwiązania ?
Rid
Może to okaże się pomocne.
shreker
questionmark.gif? a w czym miało by mi to pomóc, co ma ochrona sesji wspólnego z tematem ?
Rid
Jest opisane jak przypisac ip do sesji.Zobacz jak wygląda licznik strony,i zamiast liczby ,do sesji przypisywać IP.
pedro84
Sesje przechowujesz w bazie, przechowujesz tam też czas ostatniej akcji i IP.


Łopatologicznie można też zrobić to na pliku .txt.
shreker
witam, problem już rozwiązałem. zrobiłem to mniej więcej tak:
1. zapisuję do bazy przy wejściu usera - ip, browser, nazwę usera i time() - jeżeli jest to "nowy user"
2. funkcja sprawdza czy ip, user i browser już są w bazie
3. jeżeli użytkownik już był to - update time() w bazie
4. jeżeli usera nie było (czyli jest po raz pierwszy - to insert nowego usera do bazy
5. porównuję time() z czasem z bazy
6. jezeli jest czas>(time()-180) to dodaję jako online, jeśli nie to nie
7. wyświetlam rezultat whil'em

co o tym sądzicie, może ktoś ma jakieś ciekawe pomysły ?
ps. ma to pewną wadę (przekłamanie) - mianowicie wchodząc na stronę automatycznie mój adres jest dodawany do bazy (czyli jestem online), natomiast po zalogowaniu jako admin pokazuje mi dwa adresy online - adres z przed zalogowania i drugi taki sam po zalogowaniu.

Diablos
Przyda Ci sie punkt 8, czyli usun z bazy wszystkie IP osób które nie odswiezyly strony od X czasu, chyba ze chcesz zbierac takie dane.
Poza tym warto te wszsytkie operacje zrobic jako oddzielna funkcje/procedure w SQL.
!*!
Cytat
ps. ma to pewną wadę (przekłamanie) - mianowicie wchodząc na stronę automatycznie mój adres jest dodawany do bazy (czyli jestem online), natomiast po zalogowaniu jako admin pokazuje mi dwa adresy online - adres z przed zalogowania i drugi taki sam po zalogowaniu.


To po co wykonujesz operacje dodawania do bazy dwa razy?

A jak chcesz coś bardziej dokładnego zainteresuj się websocets w html5. Wtedy będziesz mieć listę IP "na żywo". http://html5demos.com/web-socket
shreker
Cytat(Diablos @ 12.09.2011, 14:48:52 ) *
Przyda Ci sie punkt 8, czyli usun z bazy wszystkie IP osób które nie odswiezyly strony od X czasu, chyba ze chcesz zbierac takie dane.
Poza tym warto te wszsytkie operacje zrobic jako oddzielna funkcje/procedure w SQL.


jasne masz, rację ... zapomniałem to po prostu dopisać, tyle że u mnie jest to pomiędzy punktem 6 i 7 :-)
natomiast co do funkcji to oczywiści jest to wszystko zapisane jako jedna funkcja, odpalana na początku skryptu.


Cytat(!*! @ 12.09.2011, 14:59:35 ) *
To po co wykonujesz operacje dodawania do bazy dwa razy?

A jak chcesz coś bardziej dokładnego zainteresuj się websocets w html5. Wtedy będziesz mieć listę IP "na żywo". http://html5demos.com/web-socket


nie wykonuję operacji podwójnego dodawania do bazy.
funkcja jest uruchamiana na początku skryptu, czyli: wchodząc na stronę moje ip jest automatycznie dodane do bazy, natomiast drugi raz zostaję dodany po zalogowaniu (ip i nazwa usera). oczywiście można to zrobić w ten sposób, ze jeżeli są dwa takie same adresy ip to jeden zostaje automatycznie usunięty, tylko wtedy też nie mam pewności że akurat nie wejdzie w tym samym momencie na stronę ktoś o takim samym ip (np. sieci osiedlowe - adres wspólny).
!*!
Czyli jednak dodajesz 2 razy. Zrób to w ten sposób:

Wchodzisz na stronę > zapisujesz IP, UA, czas rozpoczęcia sesji do bazy > logujesz się i tyle. Zmieniasz tylko status z 0 na 1, gdy zalogowany.
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.