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

时间:2011-09-28 14:01:22

标签: session symfony

我的用户在Doctrine中设置了许多关系,但其中一个特别是导致我遇到很多问题,每个用户可以拥有多个成员资格,每个成员都有会员类型。

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

  1. 会话空白
  2. 我登录但确保我被重定向到不加载成员身份的页面
  3. 会话现在包含用户对象和关系的所有信息
  4. 访问加载成员资格的“您的帐户”,它们会正确显示。
  5. 会话已被核实,现在正如第1步中所述
  6. 我刷新页面并返回登录页面
  7. 我已经定义了自己的用户提供程序,我注意到如果我在refreshUser中将每个成员资格的成员资格类型设置为null,它就会开始工作,所以我猜测会话在这种关系上遇到了麻烦。

    我真的很难找到解决方案,所以任何帮助都会非常感激。

    编辑:正在做更多的实验,发现如果我切换到文件会话,一切都开始工作,所以它必须与在数据库中存储会话相关。我使用Symfony Cookbook中的指南进行了切换。这里参考我的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中的一个错误

1 个答案:

答案 0 :(得分:0)

它可能在你的等于方法太严格。如果你做$ user === $ otherUser;并且对象已经改变(关系不再是具有代理的集合),它将返回false。