我试图将php会话从文件移动到数据库。之后:pdo_session_storage我设置了symfony,如下所示:
config.yml:
session:
handler_id: session.handler.pdo
Run Code Online (Sandbox Code Playgroud)
services.yml:
session.handler.pdo:
class: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
arguments:
- "pgsql:host=%database_host_access%;port=%database_port_access%;dbname=%database_name_access%"
- { db_username: %database_user_access%, db_password: %database_password_access% }
Run Code Online (Sandbox Code Playgroud)
可以正确看到数据库,并为每个会话在表中创建一行:sessions。
问题是:每次我重新加载页面时,会话属性都会丢失。似乎数据是从零开始写入的,而不是附加到现有属性中。
通过一些调试,我发现NativeSessionStorage->loadSession()装入的数据$_SESSION为空,因此SessionHandlerProxy->write()写入具有空属性的数据。
NativeSessionStorage :: loadSession():
protected function loadSession(array &$session = null)
{
if (null === $session) {
$session = &$_SESSION;
}
$bags = array_merge($this->bags, array($this->metadataBag));
foreach ($bags as $bag) {
$key = $bag->getStorageKey();
$session[$key] = isset($session[$key]) ? $session[$key] : array();
$bag->initialize($session[$key]);
}
$this->started = true;
$this->closed = false;
}
Run Code Online (Sandbox Code Playgroud)
哪里 …