Problem z unserialize

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

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 | 2018-05-13 12:55:01 UTC | #2

Chwila. Czegoś nie zauważyłem.


Szymoon202 | 2018-05-14 19:00:21 UTC | #3

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 | 2018-05-14 18:50:39 UTC | #4

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 | 2018-05-14 20:11:17 UTC | #5

@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: sessiondestroy(): Trying to destroy uninitialized session in /home/user/ts3/panel/functions/generateusersessions.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/generateusersessions.php on line 23
PHP Warning: sessionstart(): Cannot send session cache limiter - headers already sent (output started at /home/user/ts3/panel/core.php:2) in /home/user/ts3/panel/functions/generateusersessions.php on line 23
PHP Warning: session
decode(): Session is not active. You cannot decode session data in /home/user/ts3/panel/functions/generateusersessions.php on line 24


Pantoflarz | 2018-05-15 08:09:25 UTC | #6

gdy napisałem

[quote=”Pantoflarz, post:4, topic:6688”]
odczytywanie danych sesji bez wykorzystania tzw. globali w PHPie nigdy nie było oficjalnie wspierane.
[/quote]

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 | 2018-05-15 13:25:18 UTC | #7

[quote=”Pantoflarz, post:6, topic:6688”]
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.
[/quote]

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


Szymoon202 | 2018-05-15 13:43:35 UTC | #8

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 | 2018-05-15 19:08:49 UTC | #9

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 “datagodzina” i wtedy wiesz kiedy kto był aktywny. Branie ilości osób online robisz wtedy zwykłym COUNT z klauzulą WHERE datagodzina była w ciągu ostatnich pół godzin dajmy na to.


Szymoon202 | 2018-05-15 20:20:49 UTC | #10

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 | 2018-05-15 20:28:44 UTC | #11

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


system | 2021-02-17 10:26:07 UTC | #12

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