Symfony2用户因缓存而以其他用户身份登录

时间:2012-10-10 17:44:42

标签: symfony varnish

最糟糕的情况发生了。

虽然我采取了所有必要的预防措施,但似乎清漆缓存了用户登录的页面。

现在,当你访问我的网站时,你就是这个XXX人,这显然不是你。你可以编辑他的个人资料......

我只缓存了2页(主页和一个列表页面),我有标签:

@Cache(smaxage="10800")

在我的所有模板中,我使用ESI(用于菜单/页脚/登录模式)以防止出现这种情况:

{% render "HomeBundle:Home:login" with { 'appRequestUri' : app.request.uri }, { 'standalone': true } %}
{% render 'HomeBundle:Home:menu' with { 'locale' : app.request.locale }, { 'standalone': true } %}

“登录”操作没有@Cache注释。

这是我在Varnish使用的default.vcl

我做错了什么?

PS:我确实有esi: { enabled: true }并导入了routing.yml

中的esi路线

2 个答案:

答案 0 :(得分:2)

在查看您的VCL后,您似乎会在每个请求中缓存 Cookie 。这不是你想要的,不是吗?

我建议您尽快关闭 vcl_recv

sub vcl_recv {
    if (req.http.Cache-Control ~ "no-cache") {
        return (pass);
    }
    set req.http.Surrogate-Capability = "abc=ESI/1.0";
 }

这样,默认 vcl_recv 将在之后立即调用,并且所有记录的请求都不会被缓存。

答案 1 :(得分:0)

我认为这不是因为缓存。 如果它只是缓存,您将无法编辑配置文件,因为您将获得用户的缓存页面而不是他的会话......