5

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

SELECT data FROM session;

并希望他们在我输出这些数据时解码数据。我试过使用session_decode()which 来操纵$_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/yo/r/sdIqmHJn-SK.gif";

它适用于正常的会话处理,它按应有的方式读取和写入会话到数据库。

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

4

1 回答 1

4

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

这些 [sessions] 是带有变量名的序列化值列表。

来自: 序列化自述文件

因此,您需要创建自己的session_unserialize函数,该函数能够解码session_decode从数据库返回的字符串(例如 via )。注意这需要那里的所有内容,例如,如果会话包含序列化对象,则需要加载类定义。

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

function unserialize_session($data) {
    $hasBuffer = isset($_SESSION);
    $hasBuffer && $buffer = $_SESSION;
    session_decode($data);
    $session = $_SESSION;
    $hasBuffer ? $_SESSION = $buffer : unset($_SESSION);
    return $session;
}
于 2012-12-14T11:28:17.820 回答