如何在自定义处理程序中反序列化会话数据 [英] How to unserialize session data in a custom handler

查看:33
本文介绍了如何在自定义处理程序中反序列化会话数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 sessionHandlerInterface 将会话保存在数据库中.一切正常.但我想从数据库中获取所有序列化数据,如

I have used sessionHandlerInterface to save the session in database. Everything works fine. but I want to get all the serialized data from the database like

SELECT data FROM session;

并希望他们在我输出数据时解码数据.我曾尝试使用 session_decode() 来操作 $_SESSION 数组本身,这会导致问题.我只想获取序列化数据并返回解码数据.

and want them to decode the data when i output those. i have tried using session_decode() which is manipulating $_SESSION array itself which is causing trouble. I just want to get the serialized data and return the decoded data.

这是保存在数据库中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://间static.ak.fbcdn.net/rsrc.php/v2/yo/r/sdIqmHJn-SK.gif";

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";picture|s:61:"http://m-static.ak.fbcdn.net/rsrc.php/v2/yo/r/sdIqmHJn-SK.gif";

它在正常的会话处理中工作正常,它按应有的方式读取和写入会话到数据库.

It works fine with normal session handling, it reads and writes session to database as it should.

我想获取活动会话的所有数据.如果我使用从会话中选择数据.它返回上面的会话数据(编码),我想获取它的解码数据.

I want to get all the data of active sessions. if i use SELECT data FROM sessions. it returns the above session data(encoded) i want to get the decoded data of it.

推荐答案

PHP serializeunserialize 函数不能用于序列化和反序列化会话数据.即使(默认情况下 - 并且仅在默认情况下)序列化可能看起来相似,这两个关注单个变量内容的函数仍有重要区别only:

那些 [sessions] 是带有变量名称的序列化值列表.

Those [sessions] are a list of serialized values with their variable name.

(来自: 序列化自述文件)

因此您需要创建自己的 session_unserialize 函数来解码字符串(例如通过 session_decode) 从您的数据库返回.注意这需要里面的所有东西,例如如果会话包含序列化对象,则需要加载类定义.

So you would need to create your own a session_unserialize function that is able to decode the string (e.g. via session_decode) which is returned from your database. Take care that this needs everything in there, e.g. if the session contains serialized objects, the class definitions needs to be loaded.

一个示例性的 session_unserialize 函数可能看起来像(采用: 一个会话相关答案):

An exemplary session_unserialize function could look like (adopted from: a session related answer):

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

这篇关于如何在自定义处理程序中反序列化会话数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆