如何从文件中反序列化Symfony会话?

时间:2014-04-02 08:03:54

标签: php session symfony serialization

在dev env中app/cache/dev/sessions/sess_{session_id}文件中的Symfony存储会话。该文件的内容类似于:

_sf2_attributes|a:0:{}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:"u";i:1396424236;s:1:"c";i:1396360957;s:1:"l";s:1:"0";}bbb|i:222;IsAuthorized|b:1;

当我尝试使用unserialize()函数反序列化时,我得到FALSE

我怎样才能解冻这个?

2 个答案:

答案 0 :(得分:0)

您可以使用标准的PHP会话机制。您需要设置存储会话的目录(app/cache/dev/sessions)。然后调用标准函数session_start()将使用适当文件中的所有反序列化数据填充$_SESSION变量。

例如,您可以使用此代码:

ini_set('session.save_handler', 'files');
ini_set('session.save_path', 'path/to/your/site/folder/app/cache/dev/sessions');
session_start();

当您需要使用Symfony框架后面的会话时(如OP所需),可以使用上述方法。要使用Symfony的会话机制,您应该使用Session对象来提供所有需要的信息:

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->start();

$session->all(); // will return unserialized array of parameters

答案 1 :(得分:0)

您可以通过分解和删除有效的不可序列化字符串之前的 _something|(和类似的起始“标签”)来反序列化它。例如:

_sf2_attributes|a:0:{}
_sf2_flashes|a:0:{}
_sf2_meta|a:3:{s:1:"u";i:1396424236;s:1:"c";i:1396360957;s:1:"l";s:1:"0";}
bbb|i:222;
IsAuthorized|b:1;

你可以把它变成:

a:0:{}
a:0:{}
a:3:{s:1:"u";i:1396424236;s:1:"c";i:1396360957;s:1:"l";s:1:"0";}
i:222;
b:1;

并且您应该能够独立地将 unserialize() 应用于生成的 5 个字符串。