PHP 倒计时服务器端缓存
PHP countdown serverside cache
亲爱的程序员们大家好。
我有问题。我正在尝试使用服务器端语言 PHP 从我们的数据库中获取当前时间戳和任意时间戳之间的差异,初始化客户端 JavaScript 倒数计时器。然而,文件上的缓存让它有点困难。
对于这个演示,这是我使用的
<html>
<head>
<META http-equiv="Pragma" content="no-cache">
</head>
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
ini_set("display_errors", 1);
require_once("./config.php");
require_once("./backend.php");
if (!isset($_COOKIE["basket_ID"])) {
setcookie("basket_ID", "testguid", time() + 60 * 60 * 2);
mysql_query("INSERT INTO basket(basketID, productID, quantity, GUID) VALUES (1, 1, 2, 'testguid')");
echo "Generated cookie";
} else {
$temp = mysql_query("SELECT * FROM basket WHERE GUID = '" . mysql_escape_string($_COOKIE["basket_ID"]) . "'");
if (mysql_num_rows($temp) > 0) {
$time = mysql_fetch_assoc($temp)["timestamp"];
echo "Cookie already exists: " . $_COOKIE["basket_ID"] . "<br>";
$diff = strtotime("now") - strtotime($time);
echo "JUST NOW: " . time();
echo "<br>Now: " . (new DateTime("now"))->getTimestamp() . "<br>Cookie start: " . (new DateTime($time))->getTimestamp();
echo "<br>Second(s): " . $diff;
echo "<br>Positive second(s): " . abs($diff);
echo "<br>Random: " . rand();
}
}
?>
</html>
但是当访问者快速刷新页面时,数字保持不变。仅当您按 CTRL + F5 或使用类似方法时,才能强制客户端获取新信息并强制客户端删除缓存。
所以我想知道!有没有比我更有想象力的人愿意在这门课程中帮助我?
我愿意听取有关如何解决我的这个问题的建议。
感谢您阅读本文。 (当然还有尝试提供帮助)
从您的服务器响应 headers 来看,您的服务器正在使用 Varnish cache。将您的应用程序放在您确定不使用任何缓存的不同服务器上应该会有所帮助。
从 Varnish forum says 来看,没有从 .htaccess 中禁用 Varnish 的简单方法,因此您应该联系服务器管理员,要求他们为您的帐户禁用 Varnish。
作为参考,这里有一个关于从 Whosebug 禁用 Varnish 的主题:How to disable Varnish Cache from within a PHP script?
亲爱的程序员们大家好。
我有问题。我正在尝试使用服务器端语言 PHP 从我们的数据库中获取当前时间戳和任意时间戳之间的差异,初始化客户端 JavaScript 倒数计时器。然而,文件上的缓存让它有点困难。
对于这个演示,这是我使用的
<html>
<head>
<META http-equiv="Pragma" content="no-cache">
</head>
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
ini_set("display_errors", 1);
require_once("./config.php");
require_once("./backend.php");
if (!isset($_COOKIE["basket_ID"])) {
setcookie("basket_ID", "testguid", time() + 60 * 60 * 2);
mysql_query("INSERT INTO basket(basketID, productID, quantity, GUID) VALUES (1, 1, 2, 'testguid')");
echo "Generated cookie";
} else {
$temp = mysql_query("SELECT * FROM basket WHERE GUID = '" . mysql_escape_string($_COOKIE["basket_ID"]) . "'");
if (mysql_num_rows($temp) > 0) {
$time = mysql_fetch_assoc($temp)["timestamp"];
echo "Cookie already exists: " . $_COOKIE["basket_ID"] . "<br>";
$diff = strtotime("now") - strtotime($time);
echo "JUST NOW: " . time();
echo "<br>Now: " . (new DateTime("now"))->getTimestamp() . "<br>Cookie start: " . (new DateTime($time))->getTimestamp();
echo "<br>Second(s): " . $diff;
echo "<br>Positive second(s): " . abs($diff);
echo "<br>Random: " . rand();
}
}
?>
</html>
但是当访问者快速刷新页面时,数字保持不变。仅当您按 CTRL + F5 或使用类似方法时,才能强制客户端获取新信息并强制客户端删除缓存。
所以我想知道!有没有比我更有想象力的人愿意在这门课程中帮助我?
我愿意听取有关如何解决我的这个问题的建议。
感谢您阅读本文。 (当然还有尝试提供帮助)
从您的服务器响应 headers 来看,您的服务器正在使用 Varnish cache。将您的应用程序放在您确定不使用任何缓存的不同服务器上应该会有所帮助。
从 Varnish forum says 来看,没有从 .htaccess 中禁用 Varnish 的简单方法,因此您应该联系服务器管理员,要求他们为您的帐户禁用 Varnish。
作为参考,这里有一个关于从 Whosebug 禁用 Varnish 的主题:How to disable Varnish Cache from within a PHP script?