Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik zalogowanych użytkowników...
Forum PHP.pl > Forum > PHP
missile
Witam.
Napisałem skrypt zliczający użytkowników online oraz wyświetlający tych zalogowanych, korzysta on z bazy danych MySQL i oparty jest o sesje i ip. Skrypt działa poprawnie, wszystko wyświetla się tak jak potrzeba, jednak problem pojawił się gdy zacząłem sprawdzać dziwne działania użytkowników, czy to przypadkowe, czy wykonane z premedytacją. Chodzi głównie o obsługę cookies i związane z nim autoryzowanie użytkownika. W momencie wyłączenia obsługi cookies i/lub usunięcie ciasteczka nie mam dostępu do zmiennych sesyjnych a tym samym nie mogę usunąć rekordu zalogowanego użytkownika z tabeli.
Wiem istnieje możliwość przesyłania identyfikatora sesji metodą GET ale chcę tego uniknąć jest też pole ukryte w formaularzu ale wtedy bez JS się nie obejdzie.
Powiem krótko chodzi mi o taki mechanizm jaki działa na tym forum tzn. jeżeli wyłącze obsługę cookies to automatycznie mój nick nie jest już wyświetlany...

Z góry wielkie dzięki za, choćby najmniejszą, wskazówkę smile.gif
bim2
Zalezy jak dales to online users. ja np dalem ze dodaje sie do tabeli kto kiedy dodal sie wpis i nick usera. Jesli wpis dodal sie wiecej niz 100sec to user nie jest na stronie biggrin.gif, wiec problem z glowy (tak masz w phpbb)
missile
To wiem, jednak jeśli użytkownik wyłączy obsługę cookies to w Twoim przypadku jego login nadal będzie wyświetlany przez 100 sekund, bo nie masz już loginu użytkownika, związanego z identyfikatorem sesji zawartym w ciachu, aby usunąć odpowiedni rekord z tabeli...

pzdr
eai
Tabela uzytkownikow on-line
Kod
USER_ID | START_TIME
* START_TIME = time();
* $END_TIME = 200
                       w sekundach




I teraz tak piszesz funkcje np odswiez_user(); która robi UPDATE tabeli za kazdym razem jak uzytkownik wykona jakas akcje na stronie np. kliknie w jakis link itp.
I piszesz druga funkcje np delete_user(); która będzie usuwała nieaktywnych userów [ if (START_TIME + $END_TIME < time()) { DELTE ... } ].

plik index.php
  1. <?php
  2.  
  3. odswiez_user();
  4. delete_user();
  5.  
  6. ?>
missile
A jeśli użytkownik wyłączy obsługę cookies w trakcie gdy jest zalogowany, nie będę miał dostępu do zmiennej $_SESSION['UserId'] nawet jeśli użyję opcji use_trans_sid to przydzieli ona nowy identyfikator sesji a uzytkownik zostanie wylogowany, co za tym jego login nadal będzie wyświetlany w tym przypadku przez 200 sekund.
Chodzi mi o natychmiastowe usunięcie jego loginu, gdy użytkownik usunie cookies i np. odświeży stronę lub przejdzie do innej, a nie po jakimś czasie...

pzdr
nexis
Piszesz o dwóch różnych rzeczach:

- użytkownik wyłączy obsługę ciasteczek
- użytkownik usunie ciasteczko

Którą z nich masz na myśli?
missile
Wiem do czego zmierzasz. Jeśli tylko wyłącze akceptację cookies to wszystkie ciasteczka pozostaną. Wtedy w przypadku ponownego włączenia tej akceptacji zostanę automatycznie zalogowany. Jeśli usunę ciasteczko takiej możliwości już nie będzie. Jedno pozostaje niezmienione, w obydwu przypadkach użytkownik zostanie wylogowany, ponieważ albo niema dostępu do identyfikatora sesji w cookies albo nie ma wogóle tego cookies.
Jednak w obydwu przypadkach login/id użytkownika powinny zostać usunięte z tabeli users_online gdyż jest on nie zalogowany. Pytanie: jak to zrobić gdy nie ma tego identyfikatora sesji? Napewno jest to możliwe, gdyż działa na Tym forum... biggrin.gif

pzdr

-----------

Ciekawi mnie czy rozwiązanie tego problemu tkwi w zastosowaniu jakiejś funkcji php czy też chodzi o założenia przy tworzeniu skryptu, a więc kwestie logiczne...

-----------

Hmm, widzę że nikt nie ma pomysłu. W każdym razie dzięki za pomoc

pzdr
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.