我曾经sessionHandlerInterface将会话保存在数据库中。一切正常。但我想从数据库中获取所有序列化数据,例如
SELECT data FROM session;
Run Code Online (Sandbox Code Playgroud)
并希望他们在我输出数据时解码数据。我试过使用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";
它适用于正常的会话处理,它可以正常读取会话并将其写入数据库。
我想获取活动会话的所有数据。如果我使用从会话中选择数据。它返回上面的会话数据(编码)我想得到它的解码数据。
PHPserialize和unserialize函数不能用于序列化和反序列化会话数据。即使(默认情况下 - 仅默认情况下)序列化可能看起来相似,但这两个仅关心单个变量内容的函数有一个重要的区别:
这些[会话]是序列化值及其变量名称的列表。
(来自: 序列化自述文件)
因此,您需要创建自己的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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3072 次 |
| 最近记录: |