【发布时间】:2015-04-08 22:11:44
【问题描述】:
我对缓存页面上的 JavaScript 和 Cookie 感到非常沮丧。
我得到以下JS代码:
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return "";
}
if (!getCookie("lang") == "{{Lang}}"){
document.reload();
}
{{Lang}} 被 PHP 后端的相同 cookie 替换。
$template = str_replace("{{Lang}}", $lang, $template);
但这并不真正相关,因为该部分按预期工作。
问题是当用户访问缓存页面时。
前面提到的JS变成了
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return "";
}
if (!getCookie("lang") == "FR"){
document.reload();
}
问题在于,即使 Chrome 开发工具清楚地表明 cookie lang 设置为“EN”,而不是“FR”,页面也不会刷新。
有解决这个缓存问题的方法吗?
【问题讨论】:
-
为什么页面被缓存了?你检查过标题吗?
-
@zerkms 因为它没有执行新的 PHP 代码,这迫使我求助于这个似乎也不起作用的 JS 解决方案。但我希望这个解决方案能够奏效,因为我对这个问题以及将来如何解决它感兴趣。
-
“因为它没有执行新的 PHP 代码” --- 你怎么知道它没有?你检查过服务器访问日志吗?
-
@zerkms 我对这个问题做了很多故障排除。我确切地知道问题是什么,我想找到解决方法。问题是 getCookie() 没有获取最新的 cookie,而是从看似缓存的页面中获取的。
-
“我确切地知道问题是什么” --- 那是什么? “页面被缓存”听起来不像是一个足够技术性的解释——提供一些证据它确实被缓存了,这不是你的猜测。 “来自看似缓存的页面。” --- 很好,当我建议您探索它以了解肯定时,您提到您已经知道它。这没有多大意义,抱歉。
标签: javascript php caching cookies