我正在尝试为我的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属性(“防火墙”实际上是播放中特定防火墙的名称)。希望能给别人一个想法。
答案 0 :(得分:0)
确保您的其他操作中的会话正确启动,从而将您重定向到登录。
$this->container->get('session')->isStarted()
如果您再次登录时收到相同的会话ID,则听起来不会使sesion失效。
答案 1 :(得分:0)
我很可能患上某种“种族”状况。看起来有一个官方的Symfony错误跟踪这个,虽然它似乎证明相当难以准确确定。