![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 12.11.2005 Skąd: hen hen Ostrzeżenie: (0%) ![]() ![]() |
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ę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) , wiec problem z glowy (tak masz w phpbb)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 12.11.2005 Skąd: hen hen Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() ![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 12.11.2005 Skąd: hen hen Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 012 Pomógł: 109 Dołączył: 26.09.2003 Skąd: nexis.pl Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 12.11.2005 Skąd: hen hen Ostrzeżenie: (0%) ![]() ![]() |
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... (IMG:http://forum.php.pl/style_emoticons/default/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 Ten post edytował missile 11.04.2006, 13:25:57 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 14:04 |