我正在使用fastcgi-cache整页缓存并使用php进行geoip_country_code,我只是使用了一个vpn并连接到另一个国家,我意识到该页面正在被缓存。
我遵循了这个:https://www.howtoforge.com/using-geoip-with-nginx-on-ubuntu-12.04但它只是php示例,我找不到任何javascript示例。我正在调用fastcgi_params中的变量,这只能通过php访问吗?
我的问题是:如何阻止此代码缓存,我认为javascript不会缓存它然后呢?
<?php
$geoip_country_code = getenv(GEOIP_COUNTRY_CODE);
$geoip_country_name = getenv(GEOIP_COUNTRY_NAME);
switch ($geoip_country_code) {
case "US":
echo "USA";
break;
case "UK":
case "IE":
case "AU":
echo "AU";
break;
default:
echo "default";
}
?>
如果是这样如何将这个PHP作为javascript?
到目前为止,我已经尝试过:
<?php
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
$geoip_country_code = getenv(GEOIP_COUNTRY_CODE);
$geoip_country_name = getenv(GEOIP_COUNTRY_NAME);
//etc..
它仍然缓存php代码,这就是为什么我要问如何在javascript中执行此操作?
到目前为止,我得到了:
<script type="text/javascript">
document.write("Entering switch block<br />");
var $geoip_country_code = getenv(GEOIP_COUNTRY_CODE);
var $geoip_country_name = getenv(GEOIP_COUNTRY_NAME);
switch ($geoip_country_code) {
case "US":
text = "USA";
break;
case "UK":
case "IE":
case 'AU': document.write("Good job<br />");
break;
default:
document.write("Good job<br />");
}
</script>
但它没有用,我的javascript是有限的,我做错了什么?
答案 0 :(得分:0)
没有必要使用JavaScript。在PHP中使用缓存控制(通过向标头添加标签以防止缓存):
答案 1 :(得分:0)
事实证明,fastcgi缓存并没有为每个人缓存同一页面。
因此,此PHP代码的缓存不相同。
我认为确实如此。我运行了这个PHP GeoIp代码,显示用户的国家名称,我刷新了缓存并加载了页面,它说澳大利亚,我的朋友在白俄罗斯加载了页面,在fastcgi缓存页面后它说白俄罗斯而不是澳大利亚。因此fastcgi缓存必须是每个用户而不是为所有人缓存同一页面。