Sprawdzanie ilości zalogowanych użytkowniów

Pytania i problemy
php
Szymoon202
Szymoon202

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
Pantoflarz

Szymoon202:

Próbowałem odczytywać dane z plików sesji,

nie. tak się tego nie robi.

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

Szymoon202
Szymoon202

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
Infinity

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
Szymoon202

Ile trwa normalna sesja w PHP? 15 minut?

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

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

Szymoon202
Szymoon202

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
SP24

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
system

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