javascript - cookie 过期不起作用,这是错误的吗?

标签 javascript html cookies web

所以我使用这段代码来删除 cookie,如果已经访问过,则让页面重定向:

    <script language="JavaScript"><!--
function Get_Cookie(name) {
    var start = document.cookie.indexOf(name+"=");
    var len = start+name.length+1;
    if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
    if (start == -1) return null;
    var end = document.cookie.indexOf(";",len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len,end));
}

function Set_Cookie(name,value,expires,path,domain,secure) {
    document.cookie = name + "=" +escape(value) +
        ( (expires) ? ";expires=" + expires.toGMTString() : "") +
        ( (path) ? ";path=" + path : "") + 
        ( (domain) ? ";domain=" + domain : "") +
        ( (secure) ? ";secure" : "");
}

function Delete_Cookie(name,path,domain) {
    if (Get_Cookie(name)) document.cookie = name + "=" +
        ( (path) ? ";path=" + path : "") +
        ( (domain) ? ";domain=" + domain : "") +
        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

var mainUrl = 'noflash.html';
var days = 365; // valid one year from now

function isCookieEnabled() {
   if (document.all) return navigator.cookieEnabled;
   Set_Cookie('testcookie',today.getTime());
   var tc = Get_Cookie('testcookie');
   Delete_Cookie('testcookie');
   return (tc == today.getTime());
}

var today = new Date();
var zero_date = new Date(0,0,0);
today.setTime(today.getTime() - zero_date.getTime());

var todays_date = new Date(today.getYear(),today.getMonth(),today.getDate(),0,0,0);
var expires_date = new Date(todays_date.getTime() + (days * 86400000));

var beenHere = Get_Cookie('beenHere');
if (beenHere == 'yes') {
   if (document.images) window.location.replace(mainUrl);
   else window.location = mainUrl;
}
else if (isCookieEnabled()) Set_Cookie('beenHere','yes', expires_date);
//--></script>

它工作正常,我检查了 cookie,它被创建,访问该页面一次后,我被重定向,但问题是过期,它说是在浏览器关闭时,这不是它应该的做(1 年后)。

代码有错吗?

最佳答案

“.toGMTString()”函数不提供 cookie 语法所需格式的日期字符串。 “删除”功能的硬编码日期是正确的,但请尝试

alert(new Date().toGMTString())

看看你得到了什么——日期部分之间没有破折号。

其他不相关的注释:您的 <script> 不需要“语言”属性标记,您也不需要在脚本主体周围使用过时的 HTML 注释;大约 12 年前就不再需要了。

编辑 — 为了更有帮助,为了获得一个 cookie 友好的日期,我可能会自己将字符串放在一起。

function cookieDate(d) {
  function d2(n) { return n < 10 ? '0' + n : n; }
  var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

  return '' +
    days[d.getUTCDay()] + ', ' +
    d2(d.getUTCDate()) + '-' +
    months[d.getUTCMonth()] + '-' +
    d.getUTCFullYear() + ' ' +
    d2(d.getUTCHours()) + ':' +
    d2(d.getUTCMinutes()) + ':' +
    d2(d.getUTCSeconds()) + ' GMT';
}

然后你可以调用“cookieDate(someDate)”来得到一个漂亮的字符串。

Here's the jsfiddle.

关于javascript - cookie 过期不起作用,这是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374847/

相关文章:

javascript - 与 promise 混淆

javascript - 如何检查 CSS 背景色是否为白色?

javascript - 满足的状态

javascript - Chart.js 中折线图的交点?

php - 如何使用 php 通过其名称的一部分获取 cookie?

javascript - 使用 php 生成的表中的可选行

javascript - 切换按钮的指令

javascript - 滚动过去时使 html 元素保持原位

纯文本的 Javascript cookie = 安全?

apache - 在 Apache 中设置多个 cookie