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