Symfony 6,无法读取旧版会话

问题描述 投票:0回答:1

我有一个旧版 API 应用程序,它可以生成传统的

session_start();
并将数据填充到
$_SESSION
中。
现在我正在用Symfony 6.4做一个v2 API,在相同的环境中,我想读取数据形式
$_SESSION

我发现与遗留应用程序集成
我不知道遗留应用程序是否有提到的

own PHP save handler
,我只是尝试了所有可能的配置组合。

framework:
    session:
        storage_factory_id: session.storage.factory.php_bridge

我取下了

var/cache
并加热了它。

结果:

  • $_SESSION
    :未定义
  • $this->requestStack->getSession()
    :给出一个复杂的对象树,没有遗留会话数据,但带有空数组的奇怪 Symfony 键
    _sf2_attributes
    _symfony_flashes
  • $this->requestStack->getSession()->get('keyInLegacySession')
    :空
framework:
    session:
        storage_factory_id: session.storage.factory.php_bridge
        handler_id: ~

我取下了

var/cache
并加热了它。

结果:同上。

framework:
    session:
        storage_factory_id: session.storage.factory.php_bridge
        handler_id: session.handler.native_file

我取下了

var/cache
并加热了它。

结果:同上。

我尝试按照https://stackoverflow.com/a/44145831/4840661中的说明进行调试,错误遗留和Symfony给出相同的ini设置。

有什么想法如何使用 Symfony 读取我的案例中的遗留会话数据吗?

php symfony session
1个回答
0
投票

我会尝试以下方法:

您可以在 Symfony 中创建自定义会话处理程序

例如,您创建

CustomNativeSessionStorage
处理程序并继承
NativeSessionStorage
处理程序。当然,您也可以采用其他现有的处理程序并自定义它们。

CustomNativeSessionStorage::start()
方法中,您可以定义会话启动或加载的方式和时间。您当然可以使用 NativeSessionStorage::start() 的一部分来实现此目的。

NativeSessionStorage::start()
方法用于启动会话,然后您可以自己控制。


namespace App\Session;

use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

class CustomNativeSessionStorage extends NativeSessionStorage
{
    public function start(): bool
    {
        // Here is your logic
        return true;
    }
}
framework:
    session:
        # ...
        handler_id: App\Session\CustomNativeSessionStorage
© www.soinside.com 2019 - 2024. All rights reserved.