Symfony2 PDOSessionHandler允许我查看一个页面,然后将我踢出

Symfony2 PDOSessionHandler允许我查看一个页面,然后将我踢出,session,symfony,pdo,doctrine,Session,Symfony,Pdo,Doctrine,我正在尝试为我的Symfony2设置实现PDOSessionHandler 它允许我登录并将我带到第一页。但当我尝试在其他地方导航时,它会将我带回登录页面 我知道我没有尝试跳转防火墙或其他任何东西,因为它与默认会话(文件中的会话)配合得非常好。我已经创建了会话表,它会写入会话。当我重新登录时,它甚至保持相同的会话ID,但它仍然不允许我通过第一页 我还确保服务器时间设置正确。我的数据库正在这个环境中的web服务器上运行,我已经验证了它们都使用了正确的时间 该表如下所示(MySQL): 我正在使用以

我正在尝试为我的Symfony2设置实现PDOSessionHandler

它允许我登录并将我带到第一页。但当我尝试在其他地方导航时,它会将我带回登录页面

我知道我没有尝试跳转防火墙或其他任何东西,因为它与默认会话(文件中的会话)配合得非常好。我已经创建了会话表,它会写入会话。当我重新登录时,它甚至保持相同的会话ID,但它仍然不允许我通过第一页

我还确保服务器时间设置正确。我的数据库正在这个环境中的web服务器上运行,我已经验证了它们都使用了正确的时间

该表如下所示(MySQL):

我正在使用以下配置:

framework:
  session:
    handler_id: session.handler.pdo

parameters:
  pdo.db_options:
    db_table:    session
    db_id_col:   session_id
    db_data_col: session_value
    db_time_col: session_time

services:
  pdo:
    class: PDO
    arguments:
      - "mysql:host=%database_host%;port=%database_port%;dbname=%database_name%"
      - "%database_user%"
      - "%database_password%"
  session.handler.pdo:
    class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
    arguments: ["@pdo", "%pdo.db_options%"]
我也在使用最新版本的Symfony(2.3)

我也使用令牌做了一些事情,并且有一个自定义的身份验证提供程序,但不做任何应该使会话本身无效的事情

有什么想法吗

谢谢


更新:


我刚刚注意到,在会话中,它始终保留我的_security.firewall.target_path属性,但似乎丢失了_security_firewall属性(“firewall”实际上是正在使用的特定防火墙的名称)。希望这能给某人一个想法。

确保会话在重定向到登录的其他操作中正确启动

$this->container->get('session')->isStarted()

如果再次登录时收到相同的会话id,则sesion听起来并不是无效的。

我很可能患有某种“种族”状况。看起来似乎有一个官方的Symfony bug在跟踪这一点,尽管事实证明要准确地确定这一点似乎相当难以捉摸


debug$session->IsStart()在其他控制器操作中。我可以在明天到办公室检查时添加它。然而,它不仅仅是一页,它似乎是我能进入的每一页。如果我简单地注释掉handler_id行(并重新登录),一切都会按预期进行,因此我认为我在会话中所做的一切都不好笑。我尝试了一下。我把它放在控制器的顶部,我可以进入页面,它说它已经启动了。我甚至尝试在内核请求事件中启动它,但它没有改变行为。我注意到它在页面上给我的会话与重定向到登录时的会话相同。此外,日志告诉我“发生了身份验证异常;重定向到身份验证入口点(SecurityContext中未找到令牌)”,还有其他想法吗?谢谢
$this->container->get('session')->isStarted()