3

最坏的情况发生了。

尽管我采取了所有必要的预防措施,但 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 }并导入了esi路由routing.yml

4

2 回答 2

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将在之后被调用,并且所有记录的请求都不会被缓存。

于 2012-10-11T13:37:36.287 回答
0

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

于 2012-10-11T08:25:47.773 回答