Session 用户关系正在破坏我在Symfony2中的会话

Session 用户关系正在破坏我在Symfony2中的会话,session,symfony,Session,Symfony,我的用户在条令中设置了许多关系,但其中一个似乎给我带来了很多问题,每个用户都可以拥有许多成员资格,每个成员资格都有一种成员类型 然而,由于某些原因,当我加载这些会员资格时,它似乎在破坏我的会话,我登录并获得一个“你的帐户”页面,这是我应该做的,但如果我刷新页面,我会被发送回登录屏幕。我的会话存储在数据库中,所以我一直在检查它们,看看会发生什么,这就是我看到的: 会话开始时是空的 我登录,但确保我被重定向到一个不加载成员身份的页面 会话现在包含用户对象和有关关系的所有信息 我访问“您的帐户”加载会

我的用户在条令中设置了许多关系,但其中一个似乎给我带来了很多问题,每个用户都可以拥有许多成员资格,每个成员资格都有一种成员类型

然而,由于某些原因,当我加载这些会员资格时,它似乎在破坏我的会话,我登录并获得一个“你的帐户”页面,这是我应该做的,但如果我刷新页面,我会被发送回登录屏幕。我的会话存储在数据库中,所以我一直在检查它们,看看会发生什么,这就是我看到的:

  • 会话开始时是空的
  • 我登录,但确保我被重定向到一个不加载成员身份的页面
  • 会话现在包含用户对象和有关关系的所有信息
  • 我访问“您的帐户”加载会员资格,它们会正确显示
  • 会话已被核化,现在与步骤1中相同
  • 我刷新页面并返回登录页面
  • 我已经定义了自己的用户提供程序,我注意到如果我在refreshUser中将每个成员资格的成员资格类型设置为null,它就会开始工作,所以我猜会话在这种关系上遇到了问题

    我真的很难找到一个解决办法,所以任何帮助都将非常感谢

    编辑:我做了更多的实验,发现如果我切换到文件会话,一切都开始工作,所以它必须与在数据库中存储会话有关。我用Symfony食谱中的指南做了这个切换。以下是my config.yml中的相关位供参考:

    framework:
        session: 
            default_locale: %locale%
            auto_start:     true
            storage_id:   session.storage.pdo
    
     parameters:
        pdo.db_options:
            db_table:       session
            db_id_col:      session_id
            db_data_col:    session_value
            db_time_col:    session_time
    
     session.storage.pdo:
        class:     Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage
        arguments: [@pdo, %session.storage.options%, %pdo.db_options%]
     pdo:
        class: PDO
        arguments:
            dsn:      "mysql:dbname=%database_name%;host=%database_host%"
            user:     %database_user%
            password: %database_password%
    

    关于它们的其他一切似乎都很好,所以可能是PdoSessionStorage中的一个bug,也可能是youequals方法中的一个bug太严格了。如果您使用$user==$otherUser;对象已更改(关系不再是具有代理的集合),它将返回false。

    嗨,Henrik,我不认为是这样。目前,我的equals检查只是比较id(希望以后能改进),我只是尝试记录它的每个响应,它总是返回true。