![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Jakieś 6 godzin siedzę, patrzę w ten monitor i... nic. Czy naprawdę nie ma funkcji, która "przerobi" mi dane w metodzie SessionHandler::read na takie, które akceptuje sesja? Przy powyższym kodzie dane sesji po prostu przepadają ponieważ przy przekazaniu ich do $_SESSION wykryty zostaje niepoprawny format (tak podejrzewam). Przekopałem naprawdę dużo stron i jedyna sensowna metoda jaką znalazłem to napisanie własnego modułu i skompilowanie go z PHP ^^ Ten post edytował 404 13.09.2012, 22:04:33 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Dane powinieneś serializować przy zapisie i deserializować przy odczycie. Teraz robisz na odwrót.
2. Za takie potworki jak wyrażenie przy return w metodzie read ktoś powinien Ci palce połamać... (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie wydaje mi się. Właśnie problem w tym, że SessionHandlerInterface::read ma zwrócić zakodowany string, który potem zostanie przekazany do $_SESSION. Odczytując dane sesji z bazy muszę więc je zakodować. serialize i unserialize to nie te funkcje i w tym jest problem.
Cytat Cytat abstract public string SessionHandlerInterface::read ( string $session_id ) Reads the session data from the session storage, and returns the results. Called right after the session starts or when session_start() is called. Please note that before this method is called SessionHandlerInterface::open() is invoked. This method is called by PHP itself when the session is started. This method should retrieve the session data from storage by the session ID provided. The string returned by this method must be in the same serialized format as when originally passed to the SessionHandlerInterface::write() If the record was not found, return an empty string. The data returned by this method will be decoded internally by PHP using the unserialization method specified in session.serialize_handler. The resultig data will be used to populate the $_SESSION superglobal. Note that the serialization scheme is not the same as unserialize() and can be accessed by session_decode(). |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Teraz zwróć uwagę na ostatni akapit z zacytowanego przez Ciebie fragmentu manuala. (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ok, w takim razie dlaczego jak robię tak:
...to $_SESSION jest pusta? (IMG:style_emoticons/default/smile.gif) Ten post edytował 404 13.09.2012, 21:44:52 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
To jest ten moment, w którym odpalasz debugger i sprawdzasz czy na każdym etapie w każdej zmiennej jest to co być powinno. Być może z jakiegoś powodu dane nie są pobierane z bazy danych? Albo mają zły format.
Twoja metoda read($id) zwraca w tej chwili całą tablicę z bazy danych, a powinna zwracać jedynie zawartość sesji, tj. kolumnę session_data. PS. Czy w bazie danych znajdują się odpowiednie dane? Ten post edytował Crozin 14.09.2012, 11:44:58 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Widzisz, bo problem w tym, że ja chcę mieć dostęp nie tylko do "session_data", ale też np. do id usera, czasu rozpoczęcia sesji itd. w $_SESSION. Czyli podsumowując, szukam funkcji, która mi przerobi array na session_data ^^
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. W konstruktorze MySessionHandler przekaż obiekt, który wypełnisz sobie metadanymi dot. sesji.
2. W read() uzupełnij ten obiekt pobranymi danymi, a zwróć jedynie dane z session_data, którymi PHP napełni tablicę $_SESSION. Ewentualnie zostaw w ogóle wbudowany mechanizm sesji w spokoju i zrób swój od podstaw. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.09.2025 - 02:41 |