3

我一直在尝试通过使用phpserializeserek 的模块(从Python 中的Unserialize PHP data 获得)来反序列化 Python 中的 PHP 会话数据,但这对我来说似乎是不可能的。

两个模块都希望 PHP 会话数据如下所示:

a:2:{s:3:"Usr";s:5:"AxL11";s:2:"Id";s:1:"2";}

但是会话文件中存储的数据是:

Id|s:1:"2";Usr|s:5:"AxL11";

任何帮助将不胜感激。

4

2 回答 2

2

在 Google 上到达第 3 页后,我发现原始应用程序phpserialize的一个分支与我提供的字符串一起使用:

>>> loads('Id|s:1:"2";Usr|s:5:"AxL11";')
{'Id': '2', 'Usr': 'AxL11'}
于 2013-10-13T23:58:24.467 回答
1

用于 PHP会话序列化的默认算法不是使用的算法serialize,而是另一种称为内部损坏的格式php,它

不能存储数字索引或字符串索引包含特殊字符(|!$_SESSION.


正确的解决方案是通过更改INI 设置,将残缺的默认会话序列化格式更改为Armin Ronacher 的原始phpserialize库支持的格式,甚至将其序列化和反序列化为 JSON 。session.serialize_handler

我决定在 PHP 端使用前者以获得最大的兼容性,方法是使用

ini_set('session.serialize_handler', 'php_serialize')

这使得新会话与标准兼容phpserialize

于 2016-08-02T06:32:50.397 回答