2009-10-30 60 views
0

我在我的网站上使用了下面的标题,但是我遇到了一个问题。我第一次访问我的网站时,我没有看到我的ACP链接。还有一些情况是,我们的数据库中只有注册成员可以创建信息,但表单仍在为未登录用户加载,因此信息正在使用member_id字段为0创建。标题页缓存

我认为问题是缓存文件停留在代理缓存太长时间。也许我错过了某些东西或误解了我正在使用的缓存技术。

任何人可以提供任何建议,将不胜感激。

 if ($currentMember->isLoggedIn()) { 
    $this->cachePermission = 'private'; 
    } else { 
    $this->cachePermission = 'public'; 
    } 
    $this->tru->header->set('Pragma', array(
    $this->cachePermission 
)); 
    $this->tru->header->set('Cache-Control', array(
    $this->cachePermission, 
    'no-cache', 
    'max-age=300', 
    's-maxage=300', 
    'must-revalidate' 
));

更新

我主要是想获得后退按钮,在用户的浏览器工作。我不希望任何其他的缓存。

回答

2

如果根据用户是否登录进行更改,我建议不允许该页面被缓存。

Cache-Control: no-store, must-revalidate 
Expires: 0 

如果这太极端了,我至少会建议使用总是和Cache-Control: private绝不允许它被存储在代理缓存。根据我的经验,当不同的用户看到不同的东西时,允许代理缓存它只会造成麻烦。

更新时间:

根据我的经验,发现如果你想让它在所有主要浏览器运行相同的那样的中间地带是很困难的。你可以尝试从Cache-Control: private, must-revalidate开始并从那里开始。

另一件事,可能有助于基于页面的状态和用户登录时使用ETag header,一旦头部被添加,pecl_http提供了一些有用的功能,如http_cache_etag()发送到浏览器中的304 /未修改响应所以它知道要从缓存加载。

+0

页面的标题包含一个网络栏,其中包含您所有的登录功能。因此,网站上的每个页面都会维护用户是否已登录。我真的只想当用户在浏览器中加载缓存时在浏览器中回退或转发。 – Webnet 2009-10-30 12:44:05

+0

我按照你的建议调整了标题,只是私人/必须重新验证,我会看看它是如何工作的。 – Webnet 2009-11-01 20:25:17

+0

它似乎不工作。我无法确定发生了什么。每当我第一次访问该页面时,它都有我的正确用户名,因此可以正确检测我的登录信息。它显示“我的账户”链接以及注销选项等。但作为我网站上的作者,在显示初始页面后,我只能看到作者CP的链接。 – Webnet 2009-11-03 03:24:50

0

我见过FireFox在缓存方面变得非常积极。你可以知道,当你在你的URI中输入一个模拟的查询字符串时,会发生这种情况,并且你会得到新的结果。

?asdf=1 

在诊断浏览器的疯狂时,我经常会用到最后的结果。