Cookie未在页面重新加载时保存

时间:2013-09-27 16:25:03

标签: javascript jquery cookies timezone timezone-offset

我有这段代码

$(document).ready(function () {
    var d = new Date();
    var newMinutes = d.getTimezoneOffset();

    var storedMinutes = getCookieValue("tzom");

    if (newMinutes != storedMinutes) {
        setCookie("tzom", newMinutes);

        alert("new" + newMinutes);
        alert("stored" + storedMinutes);

        document.location.reload(true);
    }
});

我在这里要做的是检查cookie中的时区值,看它是否与用户设置的当前时区不同。如果我的用户访问该站点并更改其时区然后转到另一页,则会发生这种情况。如果存在差异,那么我使用新值设置cookie并重新加载页面。问题是,当我重新加载页面时,它仍然显示时区存在差异,因此页面在无限循环中重新加载。如果我在这个无限循环期间以某种方式能够点击不同的页面,那么循环就会停止。

事实上,我注意到,通过取出重新加载,在更改我的时区之后,如果我点击页面时报告时区不同,如果我再点击第二页时区仍然是据报道是不同的,只有在第三页点击时才会报告不同的cookie报告。

这里有什么问题?

修改

其余代码在这里

function getCookieValue(c_name) {
    var c_value = document.cookie;
    var c_start = c_value.indexOf(" " + c_name + "=");
    if (c_start == -1) {
        c_start = c_value.indexOf(c_name + "=");
    }
    if (c_start == -1) {
        c_value = null;
    }
    else {
        c_start = c_value.indexOf("=", c_start) + 1;
        var c_end = c_value.indexOf(";", c_start);
        if (c_end == -1) {
            c_end = c_value.length;
        }
        c_value = unescape(c_value.substring(c_start, c_end));
    }
    return c_value;
}

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

1 个答案:

答案 0 :(得分:1)

你的setCookie函数需要3个参数,而不是2个。

尝试将代码更改为:

if (newMinutes != storedMinutes) {
    setCookie("tzom", newMinutes,365); //cookie will persist for 365 days

    alert("new" + newMinutes);
    alert("stored" + storedMinutes);

    setTimeout("document.location.reload(true)",1000);
}