首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于登录用户的清漆/Drupal缓存

用于登录用户的清漆/Drupal缓存
EN

Drupal用户
提问于 2013-11-06 12:32:00
回答 2查看 3.6K关注 0票数 3

问题

清漆是缓存网页时,我去我的网站匿名。

我打开了“匿名用户缓存页”,所以这是预期的。

但是,当我登录时,它继续加载我在注销时访问的页面的缓存页面,所以用户特定的菜单永远不会显示,登录按钮也会继续显示,即使我已经登录了。

我认为Varnish不适用于登录用户,我使用的是默认的drupal缓存系统,而我认为它不适用于登录用户?我怎么才能阻止这一切?

服务器设置

LEMP Stack - Ubuntu Server 12.04

APC + Memcached

清漆

Drupal缓存设置:

为匿名用户启用->缓存页

最小缓存寿命-> 0

缓存页的过期( -> 6小时)

清漆模块设置:

清漆缓存清除: Drupal默认值

我使用本指南和这个Varnish文件安装了Varnish:http://andrewdunkle.com/how-install-varnish-drupal-7

浏览器缓存

我在Firefox中禁用了浏览器缓存,并且我的主页上仍然有刷新缓存点击,但是现在菜单加载正确。这意味着什么?

EN

回答 2

Drupal用户

回答已采纳

发布于 2013-11-06 14:23:32

你有两个选择:

解决方案1:不允许浏览器

中的缓存

为了防止浏览器存储和重用页面,您必须确保Cache-Control:no-cache, must-revalidate, post-check=0, pre-check=0位于相应的(HTML)页面上。

您可以在sub vcl_deliver中强制这个标头。只需确保没有将该头放在静态资产上(如图像、CSS和JavaScript文件):

代码语言:javascript
复制
sub vcl_deliver {
  set req.http.Cache-Control = "no-cache, must-revalidate, post-check=0, pre-check=0";
}

解决方案2:确保变量: Cookie位于响应

如果希望强制浏览器在cookies更改(即打开会话)时使其缓存失效,则必须确保响应上有Vary: Cookie头。

代码语言:javascript
复制
sub vcl_deliver {
  if (resp.http.Vary !~ "Cookie") {
    set resp.http.Vary = resp.http.Vary + ", Cookie";
    set resp.http.Vary = regsub(resp.http.Vary, "^,\s*", "");
  }
}

同样,如果您限制这个片段--根据用户是否登录而具有不同内容的页/文件类型--则缓存更有效。

Safari (至少v5是Windows的最后一个,以及iPad 1和一些旧的iPhones上的一个)有一个令人讨厌的错误。我建议添加以下代码片段,以禁用Safari浏览器缓存:

代码语言:javascript
复制
sub vcl_deliver {
  if (resp.http.X-Generator ~ "Drupal" && req.http.user-agent ~ "Safari" && req.http.user-agent !~ "Chrome") {
    set resp.http.Cache-Control = "no-cache, must-revalidate, post-check=0, pre-check=0";
  }
}

注意:这与bug报告的注释中提出的解决方案略有不同。通过将片段放入vcl_deliver而不是vcl_fetch,我们避免了分离回收箱。还请注意,通过在X-Generator ~ "Drupal"上进行匹配,我们避免了禁用静态资产的浏览器缓存。

今天(2013年11月),我在Safari5.1.1 (Windows)、6.1 (MacOSX10.8/ Mountain )和7.0 (iOS 7)上复制了这种不当行为。

票数 7
EN

Drupal用户

发布于 2013-11-06 15:07:46

我选择使用第二种选择。我将代码片段添加到我的“消失”配置文件中:

/etc/varnish/default.vcl

我添加它是因为它是自己的独立片段,而不是将if函数放在已经存在的sub vcl_deliver中。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/91353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档