Как несериализировать данные сеанса в пользовательском обработчике

Я использовал sessionHandlerInterface для сохранения сеанса в базе данных. Все работает нормально. но я хочу получить все сериализованные данные из базы данных, например

 SELECT data FROM session; 

и хотите, чтобы они декодировали данные, когда я их выводю. Я попытался использовать session_decode() который сам манипулирует массивом $_SESSION , что вызывает проблемы. Я просто хочу получить сериализованные данные и вернуть декодированные данные.

Это пример данных сеанса, сохраненных в базе данных в столбце data

fb_422782977793963_code | s: 216: "AQAVKa4Q8sOuioW75V9Ls-cDUEizgJDX5ZkRVLArDlroFvvhasdwKvbyzKEwiMVrN7nc5ghMaw0W67jQu5kt_sc_Edm9sABzB5PakdkUpXr52AViTOltPfPBQHM9T-JoGOQ4gasdbssC8Xt93NKFvdV7XRZ7ZYGZqIsu5SFpfFBHK_hNGDdRVbnbe_xUZVP9WI4h0jDy"; fb_422782977793963_access_token | S: 111: "AAAGAhasdaAKL7hAvXRv6FHUj1Tk24r7j4NqDwWWUzmXDZA2Igsb1pHjuP4jbBRNKfeYzutm0MFmgxuKPg1n0NEbvZAXM3bwoNZBiZCgZDZD"; fb_422782977793963_user_id | S: 15: "100004835469598"; изображения | S: 61: "HTTP: //m-static.ak .fbcdn.net / rsrc.php / v2 / лет / г / sdIqmHJn-sk.gif ";

Он отлично работает с обычной обработкой сеанса, он считывает и записывает сеанс в базу данных, как следует.

Я хочу получить все данные активных сеансов. если я использую SELECT data FROM session. он возвращает вышеупомянутые данные сеанса (закодированные), я хочу получить его декодированные данные.

Функции serialize и unserialize PHP не могут использоваться для сериализации и нессериализации данных сеанса. Даже если (по умолчанию – и только по умолчанию) сериализация может выглядеть схожей, существует важная разница с теми двумя функциями, которые касаются только одного содержимого переменной:

Эти [сеансы] представляют собой список сериализованных значений с их именем переменной.

( из: Serialized README )

Поэтому вам нужно создать собственную функцию session_unserialize которая сможет декодировать строку (например, через session_decode ), которая возвращается из вашей базы данных. Позаботьтесь о том, чтобы в этом нуждалось все, например, если сеанс содержит сериализованные объекты, необходимо определить определения классов.

Примерная функция session_unserialize может выглядеть ( принята из: ответ, связанный с сеансом ):

 function unserialize_session($data) { $hasBuffer = isset($_SESSION); $hasBuffer && $buffer = $_SESSION; session_decode($data); $session = $_SESSION; $hasBuffer ? $_SESSION = $buffer : unset($_SESSION); return $session; }