Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] kto jest online - problem
Forum PHP.pl > Forum > Przedszkole
Reiven
Witam,
robię na stronie moduł Kto jest online.
Zrobiłem w cookies ze sesja trwa 30minut, w bazie mysql mam pola last_login, zalogowany (online/offline) i jak zrobić że jak ktoś zamknie przeglądarke to po 30minutach czy tam nawet 5 zmieni się jego status na offline?

..............

napisałem skrypt który sprawdza czy jest użytkownik online (sprawdza jego aktywność na stronie).. ale teraz jak zrobić że jak po 10minutach żadnej aktywności automatycznie zostanie zmieniony jesgo status na offline??
Wicepsik
Ustawiasz np. CRON'a co 5 minut sprawdza czas sprawdzając bazę danych, jeśli czas większy niż 30 minut to ustawiasz offline
Reiven
a jakiś inny sposób?
paw-e-l
Cytat(Reiven @ 21.09.2009, 21:02:30 ) *
jak zrobić że jak ktoś zamknie przeglądarke to po 30minutach czy tam nawet 5 zmieni się jego status na offline?


Moim zdaniem wykonanie czegoś takiego nie jest możliwe. No bo skąd biedny skrypt ma wiedzieć czy ktoś zamknął przeglądarke czy poprostu nie klika? winksmiley.jpg Oczywiście mógłbyś napisać z użyciem ajaxa skrypt który działał by w tle i np co minute wysyłał do serwera info o statusie użytkownika ale przy większej ilości użytkowników musiałbyś z tego zrezygnować winksmiley.jpg

edit: chyba mnie wyobraźnia poniosła i źle zinterpretowałem twój problem
Void
Ja korzystam z własnego mechanizmu sesji, gdzie m.in. w metodzie _gc (garbage collection) przeszukuje wszystkie istniejące sesje i sprawdzam, które powinny wygasnąć. Metoda ta wywoływana jest w destruktorze klasy, można więc powiedzieć, że wykonuje ją skrypt poprzez użytkownika, który akurat przebywa na stronie. Dzięki temu jest niezależna od tego, czy inny użytkownik zamknął przeglądarkę, czy nie. W ogóle system sesji dobrze sprawdza się przy takich rozwiązaniach, bo umożliwia też wygodne przechowywanie zserializowanych danych w bazie oraz łatwe zliczanie użytkowników online (po prostu liczenie aktywnych sesji).

A jeżeli nie chcesz korzystać z session handlera, tylko wolisz zostać przy swoim rozwiązaniu, to chyba jedynym wyjściem jest też zrobienie metody, która sprawdzałaby pole last_login u wszystkich użytkowników i porównywałaby z aktualnym czasem. Przy małej liczbie użytkowników to się sprawdzi, natomiast przy dużej możesz trochę zamulić bazę wykonując takie zadanie po każdym przeładowaniu strony ;p
potreb
Crony?? Pierwsze słysze. Ustawiasz cza na 2 minuty aktywności + ip i tyle. Nie ma co się bawić w jakieś szczegóły.
CyberDuck_
Na swojej stronie zrobilem cos takiego, ze przy kazdym przeladowaniu strony
tak czy tak notuje do bazy danych pare informacji o uzytkowniku ... IP, czas ostatniego
logowania sie ... Wystarczy odczytywac z bazy te dane, ktore nie przekroczyly czasu dajmy
na to 5 min. Jak sam jednak zauwazysz, to w ten sposob mozna jedynie sledzic
zalogowanych na stronie. Dlatego utworzylem osobna tabele, gdzie jest zapisywana
informacja o ostatnim przeladowaniu strony i czas tego zdarzenia, IP uzytkownika, oraz
miejsce gdzie to sie dzieje na stronie. Teraz juz wystarczy odczytac te dane jesli nie
przekrocza danego czasu. Czas mozna sobie ustawiac na dowolny. Dane przestarzale, to
znaczy po przekroczeniu czasu sa kasowane. Przy 120 tys odswierzen dziennie system sie
sprawdza i nie zamula bazy danych tak wiec mozna spokojnie w ten sposob zrobic.

Efekt :

bełdzio
kiedyś, gdzieś został podany fajny sposób na spr ilości osób on-line, mianowicie należy pobrać ilość plików w katalogu, w którym php zapisuje pliki sesji smile.gif
potreb
Cytat(bełdzio @ 21.09.2009, 21:06:24 ) *
kiedyś, gdzieś został podany fajny sposób na spr ilości osób on-line, mianowicie należy pobrać ilość plików w katalogu, w którym php zapisuje pliki sesji smile.gif


A czy pliki sesji nie muszą wtedy być zapisywane do katalogu głównego, żeby je odczytać.
I trzeba rozróżnić kto jest gość a kto user.
bełdzio
Cytat(potreb @ 21.09.2009, 23:14:17 ) *
A czy pliki sesji nie muszą wtedy być zapisywane do katalogu głównego, żeby je odczytać.

obojętnie gdzie będą zapisywane, byle byś miał możliwość czytania z tego katalogu smile.gif
Fifi209
~bełdzio
A nie prościej napisać własnego session handlera i wrzucić do sesji wszystko co potrzebne? smile.gif
Zyskasz m.in. na bezpieczeństwie (o ile potrafisz pisać)
bełdzio
Cytat(fifi209 @ 22.09.2009, 07:33:54 ) *
~bełdzio
A nie prościej napisać własnego session handlera i wrzucić do sesji wszystko co potrzebne? smile.gif
Zyskasz m.in. na bezpieczeństwie (o ile potrafisz pisać)

prościej na pewno nie smile.gif handlera raczej nie napiszesz korzystając z kilkunastu znaków smile.gif

a z pisaniem u mnie nie najlepiej smile.gif
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.