【问题标题】:Javascript - Issue with caching and cookiesJavascript - 缓存和 cookie 的问题
【发布时间】: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


【解决方案1】:

JS中的不等比较是!=,所以

getCookie("lang") != "FR"

【讨论】:

    【解决方案2】:

    reload 方法接受一个指示强制缓存刷新的布尔标志。所以试试:

    document.reload(true);
    

    【讨论】:

    • 哈,这对解决我遇到的另一个问题很有用,但不是手头的问题。问题在于 IF 语句。它甚至没有到达那条线。
    • “这对解决另一个问题很有用” --- 不是。您不是在“解决”问题,而是在假装没有人。有区别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多