Problem z unserialize

Pytania i problemy
Szymoon202
Szymoon202

Cześć. Od paru dobrych tygodni piszę panel użytkownika oparty o sockety, w których są wysyłane dane między stroną www, a aplikacją działającą w procesie. Na szybko - aplikacja zbiera dane co jakiś czas, i wysyła je do baz danych strony, a gdy użytkownik wykona jakąś akcję na stronie www, to strona wysyła pakiet do bota, który to odczytuje i wykonuje. Jestem na stopniu pisania sesji dla użytkowników. Chciałbym je odczytywać. Wiem, że są one zapisane w 'serialize', więc używam 'unserialize', lecz otrzymuję błąd w konsoli. Więcej tutaj: https://hastebin.com/musedobacu.php

Pozdrawiam i liczę na pomoc.

Szymoon202
Szymoon202

Chwila. Czegoś nie zauważyłem.

Szymoon202
Szymoon202

Błąd jest taki:

PHP Notice:  unserialize(): Error at offset 0 of 1709 bytes in /home/user/ts3/panel/functions/generate_user_sessions.php on line 20
PHP Notice:  unserialize(): Error at offset 0 of 148 bytes in /home/user/ts3/panel/functions/generate_user_sessions.php on line 20
Array
(
    [sess_2dj0g56oq8gtdpqnjj4om2ejbf] =>
    [sess_sutim9rabo2aggjvf7nluuvobr] =>
)
Pantoflarz
Pantoflarz

odczytywanie danych sesji bez wykorzystania tzw. globali w PHPie nigdy nie było oficjalnie wspierane.

powinno się pozwolić PHP działać w tej kwestii samemu i nie próbować ingerować w dane sesji w pliku ani odczytywać je w ten sposób.

jeśli jednak trzeba to wykonać, należy traktować to jako sesję w sesji - aka. otwieramy plik, tworzymy sesje, decode'ujemy i po sprawie.

więcej informacji w tym poście na stack overflow - https://stackoverflow.com/questions/4698432/read-the-session-data-from-session-storage-file

Szymoon202
Szymoon202

@Pantoflarz tyle, że sesji nie można otworzyć w procesie (w bocie), gdyż nie mamy ciasteczek cookie. Możemy ją tylko otworzyć na stronie www.

PHP Warning: session_destroy(): Trying to destroy uninitialized session in /home/user/ts3/panel/functions/generate_user_sessions.php on line 26 PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/user/ts3/panel/core.php:2) in /home/user/ts3/panel/functions/generate_user_sessions.php on line 23 PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/user/ts3/panel/core.php:2) in /home/user/ts3/panel/functions/generate_user_sessions.php on line 23 PHP Warning: session_decode(): Session is not active. You cannot decode session data in /home/user/ts3/panel/functions/generate_user_sessions.php on line 24

Pantoflarz
Pantoflarz

gdy napisałem

Pantoflarz:

odczytywanie danych sesji bez wykorzystania tzw. globali w PHPie nigdy nie było oficjalnie wspierane.

to było jednoznaczne ze stwierdzeniem, że z poza WWW tego nie odczytasz. PHP CLI nie ustawia owych globali w taki sam sposób, więc jest to z poziomu bota nie możliwe aby na żywo odczytywać jakąś sesję - nie będę już nawet się wywodził jakie to mało bezpieczne i idiotyczne podejście.

Jeśli masz dane które chcesz mieć dostępne między stroną a botem, to zapisuj to w bazie danych. Prościej, masz zapewnione działanie nie zależnie od tego czy ktoś używa apache2 czy nginx.

anon10657637
anon10657637

Pantoflarz:

Jeśli masz dane które chcesz mieć dostępne między stroną a botem, to zapisuj to w bazie danych. Prościej, masz zapewnione działanie nie zależnie od tego czy ktoś używa apache2 czy nginx.

Dopowiem także, że można taki odczyt ustandaryzować zgodnie z zasadami REST lub SOAP ;)

Szymoon202
Szymoon202

Nawet nie o to mi chodziło. Chciałem sprawdzać, ile użytkowników jest zalogowanych do panelu. Takie dane trzymam w sesji a jak na razie nie mam żadnego pomysłu jak mógłbym trzymać to w bazie danych. Może i przy zalogowaniu można jakąś wartość ustawić w bazie danych, lecz jak potem to robić żeby po nie aktywności użytkownika strona usuwała te rekordy? Chciałem to zrobić przez bota który odczytuje dane z sesji. Da się jakoś inaczej sprawdzić ile jest zalogowanych użytkowników gdzie przy zalogowaniu ustawiana zmienna to $_SESSION['system']['loginstatus']? Pozdrawiam.

Pantoflarz
Pantoflarz

powtarzać swoich wypowiedzi nie będę.

Jeśli Twoim sposobem autoryzacji jest odczytywanie z sesji, a nie używanie bazy danych to ja nie wiem jak chcesz to zrobić po stronie serwerowej. Logiczniej jest to zrobić w sposób taki, że przy refreshie strony, aktualizujesz coś w bazie, typu rekord "data_godzina" i wtedy wiesz kiedy kto był aktywny. Branie ilości osób online robisz wtedy zwykłym COUNT z klauzulą WHERE data_godzina była w ciągu ostatnich pół godzin dajmy na to.

Szymoon202
Szymoon202

Ja również swoich wypowiedzi nie będę powtarzał gdyż mnie nie rozumiesz. Gdzie pisałem coś o autoryzacji danych z sesji? Chce tylko sprawdzac ile globalnie sesji jest aktywnych I czy w nich zmienna jest ustawiona. Pozdrawiam.

Pantoflarz
Pantoflarz

moje wypowiedzi dokładnie o tym mówią. Przeczytaj ze zrozumieniem od początku to może zrozumiesz.

system
system

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