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

Security Symfony 2-如何在每次页面加载时禁用查询用户?,security,optimization,symfony,Security,Optimization,Symfony,我使用自己的用户类作为symfony 2.0中安全系统的实体提供程序 我注意到,在每次重新加载页面时,symfony都会从db获取用户: 选择t0.id作为id1,选择t0.username作为username2,选择t0.salt作为salt3, t0.密码作为密码4,t0.电子邮件作为电子邮件5,t0.作为活动密码 是活动6,t0。来自w9用户t0的凭据7,其中 t0.id=?参数:['23']时间:4.43毫秒 有没有简单的方法来禁用这种行为?可能在会话变量中序列化用户数据或以某种方式缓存

我使用自己的用户类作为symfony 2.0中安全系统的实体提供程序

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

选择t0.id作为id1,选择t0.username作为username2,选择t0.salt作为salt3, t0.密码作为密码4,t0.电子邮件作为电子邮件5,t0.作为活动密码 是活动6,t0。来自w9用户t0的凭据7,其中 t0.id=?参数:['23']时间:4.43毫秒


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

您可以在
UserProvider
refreshUser
方法中更改此行为

在使用条令进行此操作时,您应该小心,并解释陷阱:

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

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

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


还是没有好答案?