0

我正在尝试为我的 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 属性(“防火墙”实际上是特定防火墙的名称)。希望能给某人一个想法。

4

2 回答 2

0

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

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

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

于 2013-06-08T05:13:09.720 回答
0

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

Symfony 错误跟踪器问题 6417

于 2013-06-11T21:15:14.543 回答