Sprawdzanie ilości zalogowanych użytkowniów

Szymoon202 | 2021-02-17 10:25:52 UTC | #1

Cześć. Mam napisany system logowania pod PHP, zwykłe sprawdzanie zakodowanych danych i jeżeli się zgadzają to w sesji jest ustawiana zmienna, że ten użytkownik jest zalogowany. Teraz jak mogę sprawdzić ile tych użytkowników jest faktycznie zalogowanych, bo sesji może być 50, a zalogowanych np. tylko 10. Oraz, czy da się również jakoś sprawdzić czy dany użytkownik jest w tej chwili zalogowany czy nie. Próbowałem odczytywać dane z plików sesji, ale to nie wchodzi w grę. Ktoś ma jaki pomysł jak inaczej mogę to napisać?


Pantoflarz | 2018-06-28 22:23:12 UTC | #2

[quote=”Szymoon202, post:1, topic:7177”]
Próbowałem odczytywać dane z plików sesji,
[/quote]

nie. tak się tego nie robi.

jedyny sensowny sposób to zapisywanie danych do bazy i wtedy prosty COUNT wystarczy.


Szymoon202 | 2018-06-29 06:15:12 UTC | #3

No ale powiedz mi jak mam takie dane zapisywać. O ile zapisanie że użytkownik się zalogował będzie proste, to jak potem sprawdzić czy nadal jest zalogowany? Może się sam wylogowac, ale może też sesja się zakończyć i jak mam wtedy zapisać to do bazy danych skoro użytkownika na stronie już nie ma a tylko przez stronę dam radę ustawiać wartości w bazie danych.


Infinity | 2018-06-29 07:10:27 UTC | #4

last_online, w którym zapisuje UNIX TIME kiedy dany uzytkownik byl na stronie (czy to zalogowany, czy to odświeżył, czy to przeszedł gdzies na inną podstrone). Jesli unixtime < 15 minut ostatnie (czyli był aktywny ostatnie 15 minut) - to zalogowany, jeśli większe - to znaczy że go nie ma na stronie. Łatwe.

Ustawienie unixtime na aktualny w jakims include nawet, i potem include_once w php.
Potem sprawdzanie prostym warunkiem czy <15 minut.

ba, nawet możesz zrobić, że po 15 minutach nieaktywnosci automatycznie takiego zawodnika wylogowuje.


Szymoon202 | 2018-06-29 07:40:03 UTC | #5

Ile trwa normalna sesja w PHP? 15 minut?


Nieznajomy11 | 2018-06-29 14:38:58 UTC | #6

Tyle ile wskazuje wartość session.gc_maxlifetime w konfiguracji. =)


Szymoon202 | 2018-07-10 11:45:58 UTC | #7

Okej, napisałem ten system. Nie śpieszyło mi się z nim, bo miałem ważniejsze sprawy, ale dzisiaj siadłem i w 30 minut to napisałem. Oparłem całość na mysql, baza z dwoma kolumnami, id użytkownika i czas. Przy kazdym odswiezeniu strony (jezeli uzytkownik jest zalogowany) bedzie sprawdzany czas w bazie, jezeli nie ma takiego rekordu to utworzy sie z aktualnym czasem a jezeli jest to po prostu zostanie zaaktualizowany. Bot ktory jest napisany pod ts3, ktory odbiera pakiety od strony sprawdza co 5 sekund wysylajac zapytanie do mysql czy czasy uzytkownikow sa wieksze niz 1440 sekund (sesja).
Myslicie ze bedzie to “optymalny” pomysł? Nie mam jak narazie innnego (chcialem to zrobic w json ale przeciez jak x uzytkownikow naraz wejdzie na strone to polowa moze sie w pliku nie zapisac a mysql dodaje zapytania do kolejki).


SP24 | 2018-07-10 20:07:24 UTC | #8

Możesz dodawać do bazy danych row o naziwe isOnline i jak użytkownik się zaloguje ustaw na online a jak się wyloguje to na offline


system | 2021-02-17 10:26:04 UTC | #9

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.