如何在自定义处理程序中反序列化会话数据

2024-03-17

我用过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(使用前将#替换为@)

如何在自定义处理程序中反序列化会话数据 的相关文章

  • 自定义 php 论坛 - 显示新的/未读的帖子

    我自己使用 php 编写了一个自定义论坛脚本 我决定不使用 phpbb 和其他工具 因为我希望我所做的事情具有 100 的灵活性 不过我遇到了一个问题 如何向用户显示帖子是否是新的 未读的 我想到了两种解决方案 1 饼干 2 数据库 我不想
  • 在 while 循环内查询可以吗?

    我在一个数据库中有两个表 我正在查询第一个表限制 10 然后循环结果 在 while 循环内 我使用第一个查询中的数据作为参数再次执行另一个查询 以下是该脚本的示例
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我
  • 将 XML 数据提取到 php [重复]

    这个问题在这里已经有答案了 我正在尝试从 XML 文件中提取数据 http freegeoip net xml google com http freegeoip net xml google com 您可以看到该文件的内容类似于
  • 在 PHP 中验证约 400MB 的大型 XML 文件

    我有一个很大的 XML 文件 大约 400MB 在开始处理之前我需要确保它的格式正确 我尝试的第一件事是类似于下面的内容 这很棒 因为我可以找出 XML 是否格式不正确以及 XML 的哪些部分 不好 doc simplexml load s
  • 如何使用图像生成 SVG 二维码?

    我有一个用于生成 jpeg 和 png 格式的 qrcode 的代码 但也想在 PHP 中生成带有背景图像的 svg qrcode 我正在使用 qrlib php 生成 jpeg 和 png 格式 QRlib php 也支持 SVG 不是吗
  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • phpunit --debug 仍然只显示点

    我想查看 phpunit 运行期间当前执行的测试 我用 debugparam 但仍然只得到点 phpunit debug PHPUnit 3 7 19 by Sebastian Bergmann Configuration read fro
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • 使用ajax发送表单数据

    我想用 ajax 以表单形式发送所有输入 我有一个这样的表单
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • Facebook PHP API 登录时抛出异常

    我尝试使用 Facebook Graph API 登录并获取用户信息 我用来获取用户信息的代码以前可以工作 但今天我尝试使用 Facebook 登录 但 Facebook API 抛出此错误 未定义的偏移量 1 home vendor fa
  • 需要一个正则表达式将 css 类添加到第一个和最后一个列表项

    更新 谢谢大家的意见 一些附加信息 它实际上只是我正在使用的一小部分标记 20 行 目的是利用正则表达式来完成工作 我还能够修改脚本 电子商务脚本 以在构建导航时插入类 我想限制我所采用的黑客数量 以便在更新到软件的最新版本时让事情变得更容
  • 迁移时未找到 Laravel 致命错误类

    我已经跑了artisan migrate reset 我删除了一些迁移文件 因为我不再需要这些表 I ran composer dump autoload其次是artisan dump autoload I ran artisan migr
  • 为什么 strtotime('a') 返回时间?

    我正在 PHP 5 3 中循环遍历 CSV 文件并检查日期 我一直在使用 strtotime 它运行良好 除了我有一个包含 1 或 2 个字符代码的字段 任何单个字符代码上的 strtotime 似乎都像我要求 now 一样 但如果代码是
  • 如何在刀片模板中通过引用 @include 来传递变量?

    在 Laravel 4 2 设置中 我在模板中有一个变量 我希望在多个包含之间共享该变量 主刀 This is the variable include header lt in header blade I often use tabin
  • 如何从 php 中的 .doc 文件获取页面数,以下代码适用于 .docx 而不是 .doc

    此代码工作 docx 格式文档 但我需要 doc 格式文档计数 php 中的页数 function CountPagesDocx filename zip new ZipArchive if zip gt open filename tru
  • Symfony2 dev环境可以工作,prod环境给出404错误

    我最近在我的机器上成功安装了 Symfony2 我可以访问http localhost app dev php 开发环境 但是 当我尝试访问 prod 环境时 http localhost app php 我在浏览器中收到以下错误消息 哎呀
  • 如何使用 PHP 从 iframe 获取 url

    如何从下面的链接获取 YouTube 网址 您可以使用 regex 和 preg match 函数 preg match src iframe string match url match 1 UPDATE如果您有使用 php 生成的页面或

随机推荐