使用Cookie进行缓存而不缓存Cookie



根据欧洲关于cookie的规则,我们需要显示一条消息,让用户知道我们使用了cookie。

当他们接受时,我们设置一个cookie!除了严重依赖跟踪cookie外,我们还需要这个cookie:(

我已经设置了Varnish来缓存资产和我的登录页,这自然会对速度产生巨大影响。资产正在实现梦想,主页从未从服务器接收到Set Cookie,因为这就是Varnish开箱即用的配置方式。

我们的清漆服务器是Centos 7,它安装了varnish 4。我们的目标是最终转到Fastly,他们有一个指南来做我想做的事情,那就是允许我们使用Cookie并避免缓存它们。

https://www.fastly.com/blog/how-to-cache-with-tracking-cookies

但是,req变量已不在Varnish 4中vcl_deliver的作用域中。

有人能找到解决这个问题的方法吗?

您应该能够将"Tmp Cookie"存储在beresp中,而不是bereq,在这种情况下,它将传播到vcl_deliveryresp。然后,您可以将其复制到设置Cookie

因此,Fastly建议的一个修改版本:

sub vcl_backend_response {
    if (beresp.http.Set-Cookie) {
        # ... so store it temporarily
        set bereq.http.Tmp-Set-Cookie = beresp.http.Set-Cookie;
        # ... and then unset it
        unset beresp.http.Set-Cookie;
    }
}
sub vcl_deliver {
    if (resp.http.Tmp-Set-Cookie) {
        set resp.http.Set-Cookie = resp.http.Tmp-Set-Cookie;
        unset resp.http.Tmp-Set-Cookie;
    }
}

这应该相当于响应处理,但您仍然希望处理传入的请求cookie(如果相关的话)。

最新更新