我有一个旧版 API 应用程序,它可以生成传统的
session_start();
并将数据填充到 $_SESSION
中。$_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 读取我的案例中的遗留会话数据吗?
我会尝试以下方法:
您可以在 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