【问题标题】:Symfony2 PDOSessionHandler Allows me to view one page, then kicks me outSymfony2 PDOSessionHandler 允许我查看一页,然后将我踢出
【发布时间】:2013-06-12 05:15:14
【问题描述】:

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

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

我知道我不想跳过防火墙或其他任何东西,因为它与默认会话(文件中的会话)完美配合。我已经创建了会话表并写入了会话。当我重新登录时,它甚至保持相同的会话 ID,但它仍然不会让我通过第一页。

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

表格如下所示(MySQL):

CREATE TABLE `session` (
  `session_id` varchar(255) NOT NULL,
  `session_value` text NOT NULL,
  `session_time` int(11) NOT NULL,
  PRIMARY KEY (`session_id`),
  UNIQUE KEY `session_id_UNIQUE` (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我正在使用以下配置:

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”实际上是正在播放的特定防火墙的名称)。希望能给别人一个想法。

【问题讨论】:

  • 在您的其他控制器操作中调试 $session->isStarted()。

标签: session symfony pdo doctrine


【解决方案1】:

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

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

如果您在再次登录时收到相同的会话 ID,听起来会话不会失效。

【讨论】:

  • 我可以在明天到办公室检查时添加。但是,它不仅仅是一页,它似乎是我可以访问的每一个可能的页面。如果我简单地注释掉 handler_id 行(然后重新登录),一切都会按预期进行,所以我认为我对会话所做的事情并不有趣。
  • 我试了一下。我把它放在我可以访问的页面的控制器顶部,它说它已经启动。我什至尝试在内核请求事件中启动它,但它并没有改变行为。我确实注意到它在页面上给我的会话与我被重定向到登录时所说的相同。此外,日志告诉我“发生身份验证异常;重定向到身份验证入口点(在 SecurityContext 中找不到令牌。)”还有更多想法吗?谢谢。
【解决方案2】:

看起来我很可能患有某种“种族”状况。似乎有一个官方的 Symfony 错误跟踪此问题,但似乎很难准确确定。

Symfony Bug Tracker Issue 6417

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2012-08-27
    • 2015-02-17
    • 1970-01-01
    • 2023-01-03
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多