我一直在尝试使用 phpserialize 和 serek的模块(从Unserialize PHP data in python获取)在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";
非常感谢任何帮助。
答案 0 :(得分:2)
在Google上找到第3页后,我发现原始应用fork的phpserialize符合我提供的字符串:
>>> loads('Id|s:1:"2";Usr|s:5:"AxL11";')
{'Id': '2', 'Usr': 'AxL11'}
答案 1 :(得分:0)
用于PHP 会话序列化的默认算法不是 serialize
使用的算法,而是另一个内部已损坏格式php
,
无法存储数字索引,字符串索引也不包含
中的特殊字符|
!
和$_SESSION.
)
正确的解决方案是将残缺的默认会话序列化格式更改为Armin Ronacher原始phpserialize
库支持的格式,甚至将序列化和反序列化为JSON,通过更改session.serialize_handler
INI设置。
我决定使用前者在PHP端使用
实现最大兼容性ini_set('session.serialize_handler', 'php_serialize')
使新会话与标准phpserialize
兼容。