1

我有一个 Symfony2 应用程序,我必须从另一个非 symfony 应用程序读取会话集。

$_SESSION像往常一样,非 symfony 应用程序只是将其会话设置为 。

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

$session = $this->get('request')->getSession();
var_dump($session->all());

甚至(我知道我不应该这样做,但无论如何)

var_dump($_SESSION);

这给了我会话已经开始的错误,尽管我从未在 Symfony 应用程序中启动会话,但我不知道为什么会出现错误。告诉我这种方式是否真的有效,以便我可以调查session_start()事情。

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

PHPSESSIDcookie 是在 Symfony2 应用程序中设置的,其值与非 symfony 应用程序中设置的 cookie 相同,但我的 Symfony2 应用程序只是拒绝读取会话的内容。($session->getName()返回PHPSESSID,要清楚)

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

那么你如何读取非 symfony 应用设置的 Symfony2 应用/控制器中的会话呢?谢谢。

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

4

2 回答 2

8

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

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

framework:
    session:
        save_path: ~

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

于 2013-03-08T04:53:23.817 回答
3

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

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

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

于 2012-11-26T08:36:25.117 回答