为用户提供服务的其他用户帐户的缓存页面

时间:2019-02-27 20:59:05

标签: php .htaccess caching http-headers cloudflare

我有一个包含用户面板的PHP脚本。在该用户面板内有一些信息,例如其详细信息,帐户余额,分配给其帐户的项目。

偶尔浏览用户面板时,会随机向您显示另一个用户帐户页面,但刷新后会回到您的页面。

我本来以为会发生某种形式的PHP会话损坏,但是我开始记录所有请求(请求者的IP +用户ID)。据此,我能够确定在随机/不经意间提供了另一个用户帐户页面时,从未执行过PHP。 (我的IP从来没有出现过显示“随机”帐户的日志条目)

该网站使用cloudflare,尽管我添加了页面规则以禁用整个客户端区域的缓存。

我添加了此内容,该内容将根据客户区域中的每个请求输出:

service-activator

在我的htaccess文件中,我将mod_expires与以下内容配合使用:

session_cache_limiter('private_no_expire:');
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

在这一点上,我完全不知道我还能采取什么措施来防止ISP / Cloudflare提供缓存的版本。

有人对导致用户面板页面的缓存版本向用户显示有什么想法吗?

发生这种情况的响应标头如下。

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType text/html "access 0 seconds"
ExpiresDefault "access 1 month"
</IfModule>

1 个答案:

答案 0 :(得分:0)

原来是Nginx微缓存导致了问题。

添加了此内容,并解决了该问题:

if ($host ~ "portal.domain.com") {
    set $CACHE_BYPASS_FOR_DYNAMIC 1;
    set $CACHE_BYPASS_FOR_STATIC 1;
}