我用过sessionHandlerInterface
将会话保存在数据库中。一切正常。但我想从数据库中获取所有序列化数据,例如
SELECT data FROM session;
并希望他们在我输出这些数据时解码数据。
我尝试过使用session_decode()
这是操纵$_SESSION
数组本身造成了麻烦。我只想获取序列化的数据并返回解码后的数据。
这是保存在数据库中的示例会话数据data
column
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”;
它可以很好地处理正常的会话处理,它可以正常读取会话并将其写入数据库。
我想获取活动会话的所有数据。如果我使用从会话中选择数据。它返回上面的会话数据(编码)我想获取它的解码数据。
The PHP serialize http://php.net/serialize and unserialize http://php.net/unserialize函数不能用于序列化和反序列化会话数据。即使(默认情况下 - 仅默认情况下)序列化可能看起来相似,但关心单个变量内容的这两个函数存在重要区别only:
这些[会话]是序列化值及其变量名称的列表。
(from: 系列化自述文件 https://github.com/ktomk/Serialized/blob/master/README#L26)
所以你需要创建自己的session_unserialize
能够解码字符串的函数(例如通过session_decode http://php.net/session_decode) 这是从您的数据库返回的。请注意,这需要其中的所有内容,例如如果会话包含序列化对象,则需要加载类定义。
堪称典范session_unserialize
函数可能看起来像(采用自: 与会话相关的答案 https://stackoverflow.com/a/12930902/367456):
function unserialize_session($data) {
$hasBuffer = isset($_SESSION);
$hasBuffer && $buffer = $_SESSION;
session_decode($data);
$session = $_SESSION;
$hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
return $session;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)