gpt4 book ai didi

postgresql - Symfony PdoSessionHandler 无法按预期与 PostgreSql 一起工作

转载 作者:行者123 更新时间:2023-11-29 11:41:32 25 4
gpt4 key购买 nike

我正在尝试将 php session 从文件移动到数据库。以下是:pdo_session_storage我将 symfony 设置如下:

配置文件:

session:
handler_id: session.handler.pdo

服务.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% }

可以正确查看数据库,并为每个 session 在表中创建一行:sessions

问题是:每次我重新加载页面时, session 属性都会丢失。数据似乎是从零开始写入的,而不是附加到现有属性上。

通过一些调试,我发现 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 通过文件管理 session ,则不会出现此行为。

我找不到关于这个主题的资源,在我看来这不是一个小问题,有人有什么建议吗?

我使用的是 Postgres 版本 9.4.1.0 和 Symfony 版本 2.6.5。

最佳答案

我发现了问题:PostgreSql 9.0 版更改了 hex 格式的默认 bytea 输出,但 Symfony 以 escape 格式处理资源。

临时解决方案是:ALTER DATABASE dbname SET bytea_output = 'escape';

这里是 github 问题:https://github.com/symfony/symfony/issues/14569

关于postgresql - Symfony PdoSessionHandler 无法按预期与 PostgreSql 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29974223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com