【问题标题】:Deleting cookies function is not working删除 cookie 功能不起作用
【发布时间】:2014-06-27 20:49:52
【问题描述】:

我想删除我的 cookie,代码可以获取和设置 cookie,,,但是删除 cookie 不起作用 请建议我回答

代码

<body>
    <select id="ThemeSelect" onchange="saveTheme(this.value);">
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
        <option value="4">Four</option>
        <option value="5">Five</option>
    </select>
    <button type="button" onclick="ShowCookie();">GetCookie</button>
    <button type="button" onclick="deleteCookie(name);">DeleteCookies</button>

    <script>
        var saveclass = null;
        function saveTheme(cookieValue) {
            var sel = document.getElementById('ThemeSelect');

            saveclass = saveclass ? saveclass : document.body.className;
            document.body.className = saveclass + ' ' + sel.options[sel.value].innerHTML.replace(" ", "").toLowerCase();

            setCookie('theme', cookieValue, 365);
        }

        function setCookie(cookieName, cookieValue, nDays) {
            var today = new Date();
            var expire = new Date();

            if (nDays == null || nDays == 0)
                nDays = 1;

            expire.setTime(today.getTime() + 3600000 * 24 * nDays);
            document.cookie = cookieName + "=" + escape(cookieValue) + ";expires=" + expire.toGMTString();

        }

        function getCookie(name) {
            var re = new RegExp(name + "=([^;]+)");
            var value = re.exec(document.cookie);
            return (value != null) ? unescape(value[1]) : null;

        }
        function ShowCookie() {
            var a = getCookie(name);
            alert(a);
        }

        function deleteCookie(name) {
            if (getCookie(name)) {
                var cookie_date = new Date();  // current date & time
                cookie_date.setTime(cookie_date.getTime() - 1);
                document.cookie = cookieName += "=; expires=" + cookie_date.toGMTString();
            }
        }

    </script>

</body>

【问题讨论】:

  • javascript - delete cookie 的可能重复项
  • 我有不同的代码。它不能重复@Padarom
  • 这不是关于你的代码,而是关于问题。链接线程中有一个函数可以完全满足您的要求。因此它是重复的。
  • 我更改了问题名称,请删除重复标记
  • 代码状态很差。您正在调用带有未定义参数的函数,document.cookie = cookieName += "=; expires=" -- cookieName 未定义,+= 没有按照您的想法执行,等等

标签: javascript cookies


【解决方案1】:
function deleteCookie(name) {
    if (getCookie(name)) {
        var cookie_date = new Date();  // current date & time
        cookie_date.setTime(cookie_date.getTime() - 1);
        document.cookie = name + "=; expires=" + cookie_date.toGMTString();
    }
}

cookieName 在此范围内未定义。将其更改为name,这是传递给函数的参数,它应该可以工作。

还可以使用+ 来连接字符串,那里还有一个额外的=,这也导致它无法工作。


查看 this Fiddle 以了解它的实际效果。

【讨论】:

【解决方案2】:

这是一个 jsfiddle:http://jsfiddle.net/CCLdr/

像这样设置您的 cookie 过期时间:

function delete_cookie( name ) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

甚至更好...

var createCookie, readCookie, eraseCookie;

createCookie = function(name,value,days) {
  var date, expires;

  if (days) {
      date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      expires = "; expires="+date.toUTCString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

readCookie = function(name) {
  var nameEQ, ca, i, c; 

  nameEQ = name + "=";
  ca = document.cookie.split(';');
  for(i=0;i < ca.length;i++) {
      c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

eraseCookie = function(name) {
  createCookie(name,"",-1);
}

看到这个帖子:javascript - delete cookie

【讨论】:

  • 我有很多其他的帖子和很多代码,但我想让我的代码完美,请在我的代码正确后提出更好的答案
  • 我提供给您的方法效果很好。没有完美的代码这样的东西,它只能通过它对未来的可维护性和可扩展性来衡量。您不应在 HTML 元素上引用 javascript 方法,而应通过事件处理程序将函数应用于这些元素。附言投反对票的人太荒谬了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多