Php Codeigniter:清漆和Cookie/会话冲突
我有一个网站,它依赖于会话和cookie。我想在上面实现Varnish缓存Php Codeigniter:清漆和Cookie/会话冲突,php,session,caching,varnish,Php,Session,Caching,Varnish,我有一个网站,它依赖于会话和cookie。我想在上面实现Varnish缓存 浏览器打开时,网站具有相同的会话id,直到浏览器关闭。但是页眉中的年龄值保持0。此年龄值描述varnish是否缓存页面。0表示它没有缓存 要检查Varnish缓存是否工作,curl-I domainname是命令,我通过终端点击它,每次点击头部都会给出不同的PHPSESSIONID,年龄值也保持为0 无法准确确定什么是不允许Varnish缓存站点 为了测试,我对会话start()进行了注释,下面是以下观察结果。 在浏览器
curl-I domainname
是命令,我通过终端点击它,每次点击头部都会给出不同的PHPSESSIONID,年龄值也保持为0如何让varnish缓存为基于会话的网站工作?有任何帮助吗?varnish不会缓存默认设置cookie的页面。解决这个问题有两种方法:
// ... default.vcl
sub vcl_recv {
unset req.http.Cookie;
return(hash);
}
// ... default.vcl
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
hash_data(req.http.Cookie);
return(lookup);
}
// ... default.vcl
sub vcl_recv {
set req.http.X-Cookie = req.http.Cookie;
unset req.http.Cookie;
return(hash);
}
然后简单地更改
vcl\u hash
函数,使用req.http.X-Cookie
而不是req.http.Cookie
我尝试了第二个选项,编辑了default.vcl。并注释了会话\u start()
。因此不会创建会话。点击浏览器上的URL。以下是响应:接受范围字节年龄0缓存控制最大年龄=3600连接保持活动内容类型text/html;charset=UTF-8日期Wed,2015年4月22日17:59:57 GMT过期1981年11月19日星期四08:52:00 GMT布拉格缓存服务器Apache/2.2.15(CentOS)通过1.1 varnish-v4 X-Powered-By PHP/5.3.3 X-varnish 21在多次点击时传输编码分块。当点击在浏览器上时,它似乎不起作用。问题是你的expires头。它是过去的,因此varnish不会缓存它。PHP设置了一些它自己的头,因为它喜欢认为这是有帮助的。去厕所吧k:我试着用curl-I domainname
在终端上点击,下面是回复:HTTP/1.1200确定日期:Wed,Apr2015年4月22日18:01:59 GMT服务器:Apache/2.2.15(CentOS)X-Powered-By:PHP/5.3.3 Pragma:cache-cache-Control:max age=3600 Content-Type:text/html;charset=UTF-8 X-Varnish:98369 32857 age:87 Via:1.1 Varnish-v4 Content-Length:28357连接:keep-alive
看起来缓存在您输入的最后一条注释上起作用了,请注意年龄标题?哦,如果您还没有找到一件有用的东西n注意到了,当Varnish成功缓存某些内容时,您将看到X-Varnish
标题有两个数值,而不是一个。