Session 如何使Symfony2直接读取php本机会话

Session 如何使Symfony2直接读取php本机会话,session,symfony,Session,Symfony,我有一个Symfony2应用程序,我必须阅读另一个非symfony应用程序设置的会话 与往常一样,非symfony应用程序只需将其会话设置为$\u SESSION 但是,当我尝试读取此会话时,数据不在那里。不管我怎么做 $session = $this->get('request')->getSession(); var_dump($session->all()); 甚至(我知道我不应该这样做,但无论如何) 这给了我会话已经启动的错误,我不知道为什么会有错误,尽管我从未在Sy

我有一个Symfony2应用程序,我必须阅读另一个非symfony应用程序设置的会话

与往常一样,非symfony应用程序只需将其会话设置为
$\u SESSION

但是,当我尝试读取此会话时,数据不在那里。不管我怎么做

$session = $this->get('request')->getSession();
var_dump($session->all());
甚至(我知道我不应该这样做,但无论如何)

这给了我会话已经启动的错误,我不知道为什么会有错误,尽管我从未在Symfony应用程序中启动过会话。告诉我这种方法是否有效,以便我可以查看
session\u start()

$session = new Session();
$session->start();
var_dump($session->all());
PHPSESSID
cookie在Symfony2应用程序中设置,其值与非symfony应用程序中设置的cookie值相同,但我的Symfony2应用程序只是拒绝读取会话内容。(
$session->getName()
返回
PHPSESSID
,待澄清)

(确切地说,这两个应用程序位于同一个域但不同的子域下,我已经在Symfony应用程序的
app/config.yml
中正确设置了
framework.session.domain
,并在非Symfony应用程序上调用了
session\u set\u cookie\u params
,以具有相同的域设置,允许在子域之间共享会话cookie,即。
.example.com

那么,如何阅读由非symfony应用程序设置的Symfony2应用程序/控制器中的会话呢?谢谢


我正在使用Symfony 2.1,如果这很重要的话。

您将无法使用本机Symfony2会话包装类,因为它们从
app/cache/{env}/sessions/{session_id}
读取会话数据,而您的非Symfony2应用程序没有将其会话数据写入该位置

您可以在非Symfony2应用程序中编写一个自定义会话处理程序来写入该位置,或者更好的是,您可以在Symfony2中编写一个本机会话处理程序类,该类绕过默认的Symfony2会话读取位置,并从默认的PHP会话路径获取它


编辑:自从写了这个答案之后,下面gadbout的帖子中提供了一个更加优雅的解决方案。

您将无法使用本机Symfony2会话包装类,因为它们从
app/cache/{env}/sessions/{session u id}读取会话数据
,并且您的非Symfony2应用程序未将其会话数据写入该位置

您可以在非Symfony2应用程序中编写一个自定义会话处理程序来写入该位置,或者更好的是,您可以在Symfony2中编写一个本机会话处理程序类,该类绕过默认的Symfony2会话读取位置,并从默认的PHP会话路径获取它


编辑:既然写了这个答案,下面gadbout的帖子中就有了一个更优雅的解决方案。

无需编写自定义会话处理程序,来自Symfony2的本机会话处理程序可以直接从默认的PHP$\u会话读/写

在Symfony2应用程序的config.yml中,添加一个保存路径选项,如下所示:

framework:
    session:
        save_path: ~

清理缓存,现在您的会话将保存在默认的PHP路径中,而不是Symfony2 sessions文件夹中。您现在可以共享数据,这就是我在新的Sf2应用程序和旧的Sf1应用程序之间登录数据所做的。

无需编写自定义会话处理程序,Symfony2的本机会话处理程序可以直接从默认的PHP$\u session读取/写入开

在Symfony2应用程序的config.yml中,添加一个保存路径选项,如下所示:

framework:
    session:
        save_path: ~

清理缓存,现在您的会话将保存在默认的PHP路径中,而不是Symfony2 sessions文件夹中。您现在可以共享数据,这就是我在新的Sf2应用程序和旧的Sf1应用程序之间登录数据所做的。

这对我来说很有效。我认为这应该是这个问题的正确答案,肯定比编写新的会话处理程序要好。这确实是一个更好的解决方案,一个卓越的解决方案。它也在symfony3中工作。非常感谢。这对我来说很有用。我认为这应该是问题的正确答案,它肯定比编写一个新的会话处理程序要好。这确实是一个更好的解决方案,一个卓越的解决方案。它在symfony3中也工作。比非常感谢你。