Symfony 2 - 如何在每次加载页面时禁用查询用户?

时间:2012-04-08 07:49:14

标签: security optimization symfony

我在symfony 2.0中使用自己的User类和安全系统的实体提供程序。

我注意到,每次重新加载页面时,symfony都会从db:

中获取用户
  

SELECT t0.id AS id1,t0.username AS username2,t0.salt AS salt3,   t0.password AS password4,t0.email AS email5,t0.is_active AS   is_active6,t0.credentials AS credentials7 FROM w9_users t0 WHERE   t0.id =?参数:['23']时间:4.43 ms

有没有简单的方法可以禁用此行为?也许在会话变量中序列化用户数据或以某种方式缓存它们?

1 个答案:

答案 0 :(得分:11)

您可以在refreshUser的{​​{1}}方法中更改此行为。

使用doctrine:There is an issue at FosUserBundle github执行此操作时应该小心,解释陷阱:

  

将它存储在会话中会导致几个问题,这就是为什么默认情况下不会这样做的原因:

     

如果管理员更改了用户的权限,则只有下次从数据库中检索用户时,更改才会生效。因此,必须小心地缓存用户以避免安全问题

     

如果您只是重复使用在会话中序列化的用户,它将不再由Doctrine管理。这意味着只要您想要修改用户或在关系中使用用户,就必须将其合并回UnitOfWork(它将返回与防火墙使用的对象不同的对象)。合并也会触发数据库查询。并且需要这样的逻辑将打破一些内部控制器,这些控制器期望能够使用用户对象进行更新。