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.