Я использовал 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; }