【问题标题】:Symfony PdoSessionHandler not working as expected with PostgreSqlSymfony PdoSessionHandler 在 PostgreSql 中无法正常工作
【发布时间】: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


    【解决方案1】:

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

    临时解决办法是:ALTER DATABASE dbname SET bytea_output = 'escape';

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

    【讨论】:

    • 感谢您的回答!我想不通,为什么我的东西是在开发上工作,而不是在生产上。在 dev 中添加上述行导致Migration ... was executed but did not result in any SQL statements.。无论如何,我都部署了该迁移,并且生产 Postgres 显然具有十六进制,因为该行 DID 导致生产中的 SQL 语句,现在它可以工作了!我在开发中使用 Postgres 9.5.6,在生产中使用 9.6.3,所以我认为不会有什么不同。生产是带有 RDS Postgres 的 AWS ElasticBeanstalk。
    • 这仍然是 Symfony 4.2 和 AWS Psql 9.6.9 的问题
    • 这仍然是 Symfony 5.1.6 和 PostgreSQL 12.4 的问题。感谢修复
    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多