Python反序列化PHP会话

时间:2013-09-29 15:45:26

标签: php python session serialization

我一直在尝试使用 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";

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

在Google上找到第3页后,我发现原始应用forkphpserialize符合我提供的字符串:

>>> 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兼容。