我使用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://间static.ak.fbcdn.net/rsrc.php/v2/yo/r/sdIqmHJn-SK.gif“;
它在正常的会话处理中工作正常,它会按原样读取和写入数据库。
我想获取活动会话的所有数据。如果我使用SELECT数据FROM会话。它返回上面的会话数据(编码)我想得到它的解码数据。
答案 0 :(得分:2)
PHP serialize
和unserialize
函数不能用于序列化和反序列化会话数据。即使(默认情况下 - 并且仅默认情况下)序列化可能看起来类似,但关注单个变量内容仅的那两个函数存在重要差异:
这些[sessions]是带有变量名的序列化值列表。
( from: Serialized README)
因此,您需要创建自己的session_unserialize
函数,该函数能够解码从数据库返回的字符串(例如,通过session_decode
)。注意这需要那里的一切,例如如果会话包含序列化对象,则需要加载类定义。
示例session_unserialize
函数可能看起来像(从 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;
}