来自本地主页的Cookie在Firefox 57的会话之间丢失

时间:2017-11-22 03:50:27

标签: javascript firefox cookies

(注意:我相信我问的是与this unanswered question相同的问题,这个问题与我的问题不太一致,部分原因是因为它没有包含MWE。关于{{3}的讨论}和this meta page,我相信可以发布一个尚未回答的现有问题的更好版本。)

以下HTML包含一个MWE版本的脚本,该版本在Firefox中运行多年,但在Firefox 57.0中突然失败。 MWE只显示一个整数,每次加载文件时都会递增。该脚本在Safari中工作,如果我在Safari启动时将此文件设置为加载,则每次都显示不同的整数。如果我在同一会话中使用文件/打开从菜单重复加载文件,它在FF中工作。但是在FF 57中,如果我在浏览器启动时加载文件,它总是显示0。检查document.cookie和其他console.log()语句表明发生这种情况是因为FF 57在会话之间丢失了cookie。为什么呢?

这是FF 57中的错误吗?我的代码是否有一些巧妙的错误导致它在FF 57中失败?也许是因为FF 57在某些方面对Javascript更严格? (我已经检查过是否有关于此的报告,但是找不到任何内容,并检查了首选项或about:config中可能控制的任何配置设置这种行为,但我找不到任何东西。)

<html>
<head>
<script type="text/javascript">
<!--
    function incrementCookie() {
        lastfooStr = getCookie("foo");

        if (lastfooStr == null || lastfooStr == NaN) { // if first time, start the indexes at 0
            nextfoo = 0;
        } else {
            nextfoo = 1 + parseInt(lastfooStr); //increment it
        }

        setCookie("foo", nextfoo, 365);
        document.write("<head><body>" + nextfoo + "</body></head>");
    }

    function setCookie(cookie_name, value, expire_days) {
        var expire_date=new Date(); // get now
        expire_date.setDate(expire_date.getDate() + expire_days); // expiration date
        var cookie = cookie_name + "=" + value +
                     "; expires=" + expire_date.toUTCString() +
                     "; path=/";
        document.cookie = cookie;
    }

    function getCookie(cookie_name) {
        var doc_cookie = " " + document.cookie;
        var cookie_value = null;
        var cookie_start = doc_cookie.indexOf(" " + cookie_name + "=");

        if (cookie_start != -1) { // found it; now get the value.
            var cookie_val_start = doc_cookie.indexOf("=", cookie_start) + 1;
            var cookie_val_end = doc_cookie.indexOf(";", cookie_val_start);

            if (cookie_val_end == -1) { // must be the last cookie
                cookie_val_end = doc_cookie.length;
            }

            cookie_value = doc_cookie.substring(cookie_val_start, cookie_val_end);
        }

        return cookie_value;
    }

window.onload=incrementCookie();
//-->
</script>
</head>
</html>

完全披露:在FF 57中,当我运行此脚本时,我在控制台中收到以下(不相关,我相信)消息:

An unbalanced tree was written using document.write() causing data from the network to be reparsed. For more information https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing
cookietest.html:48

第48行是文件的倒数第二行;它是包含</script>标记的那个。

The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.

在Safari中,我只在运行时收到此消息:

Not allowed to load local resource: file:///favicon.ico

0 个答案:

没有答案