【发布时间】:2021-11-15 22:56:58
【问题描述】:
我试图将 php 会话从文件移动到数据库。在此之后:pdo_session_storage 我将 symfony 设置如下:
config.yml:
session:
handler_id: session.handler.pdo
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% }
可以正确看到数据库,并为每个会话在表中创建一行: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;
}
&$_SESSION; 始终为空。
如果我使用 mysql 作为 session.handler.pdo 参数或让 php 通过文件管理会话,则不会出现此行为。
我找不到关于这个主题的资源,在我看来这不是一个小问题,有人有什么建议吗?
我正在使用 Postgres 版本 9.4.1.0 和 Symfony 版本 2.6.5。
【问题讨论】:
标签: postgresql symfony session