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