У меня есть собственный класс, расширяющий PdoSessionStorage, но я не знаю, как уловить атрибуты из сеанса, чтобы сохранить их как независимые поля в базе данных.
Другая возможность заключается в несериализации данных сеанса в методе sessionWrite ($ if, $ data) моего пользовательского класса PdoSessionStorage. Но я не знаю, как unserialize строку данных, чтобы получить только данные, которые я хочу.
Я попробовал это:
unserialize($data);
и это бросит мне следующую ошибку:
Неустранимая ошибка: исключить исключение «ErrorException» с сообщением «Notice: unserialize () [function.unserialize]: ошибка со смещением 0 из 82 байтов в /myserver/myapp/src/app/myBundle/myCustomPdoSessionStorage.php строка 220 'в / myserver /myapp/vendor/symfony/src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php:65 Трассировка стека: # 0 [внутренняя функция]: Symfony \ Component \ HttpKernel \ Debug \ ErrorHandler-> handle (8, 'unserialize ( ) [… ',' / Applications / M … ', 220, Array) # 1 /myserver/myapp/src/app/myBundle/myCustomPdoSessionStorage.php(220): unserialize (' _ symfony2 | a: 3: {… ') # 2 [внутренняя функция]: app / myBundle / myCustomPdoSessionStorage-> sessionWrite (' 72b823b39d316dd … ',' _symfony2 | a: 3: {… ') # 3 {main} throw in / myserver / myapp / vendor / symfony / src / Symfony / Component / HttpKernel / Debug / ErrorHandler.php в строке 65
Кто-нибудь может мне помочь?
Здесь вы используете неправильную функцию. unserialize
– для сериализованных значений, но не для сеансов. Даже те два близки друг к другу, они разные.
Вместо этого вы можете искать функцию session_decode
. Позаботьтесь о том, чтобы он не выполнял сериализацию в суперглобальной системе $_SESSION
поэтому вы можете ее обернуть:
function unserialize_session($data) { $hasBuffer = isset($_SESSION); $hasBuffer && $buffer = $_SESSION; session_decode($data); $session = $_SESSION; $hasBuffer ? $_SESSION = $buffer : unset($_SESSION); return $session; }
Аналогичным является session_encode
которая работает аналогично.
См. Также: Как несериализировать данные сеанса в пользовательском обработчике
Я нашел его!
Мой класс CustomPdoSessionStorage
расширяет NativeSessionStorage
, который управляет массивом $_SESSION
(чтение, запись и т. Д.).
Итак, из моего класса я могу использовать $this->read('userId')
и хранить его на моей БД.
Так что спасибо большое @hakre