【问题标题】:Create and Delete cookies for external websites on their subdomain为其子域上的外部网站创建和删除 cookie
【发布时间】:2016-10-14 18:53:46
【问题描述】:

在Jquery中设置Cookie函数

function setCookie(cookieName, cookieValue, cookieExpireDays) {
        var d = new Date();
        d.setTime(d.getTime() + (cookieExpireDays * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toUTCString();
        document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";" + "path=/";
    }

在 Jquery 中删除函数

function deleteCookie(name) {
    var domain = location.hostname,
        path = '/'; // root path

    document.cookie = [
        name, '=',
        '; expires=' + new Date(0).toUTCString(),
        '; path=' + path,
        '; domain=' + domain
    ].join('');
}

这适用于本地链接,但当我尝试在外部网站上使用它时。我可以得到我的 document.cookie 但 deleteCookie 函数不会删除 cookie。有什么想法吗?

*请记住,我只是从谷歌浏览器的控制台运行这些脚本

【问题讨论】:

  • 我可能是错的,但我很确定您不能为外部网站设置或删除 cookie。似乎是一个重大的安全风险。
  • 我可以设置document.cookie。我可以在 console.log(document.cookie) 中看到这些 cookie 我正在从 google chrome 控制台运行脚本
  • 你的编辑改变了一切。您添加了“请记住我在控制台中运行它”之前从未提及它。
  • 对不起,我在收到您的评论后进行了编辑。谢谢 从控制台删除这些 cookie 有什么想法吗?
  • 您要为特定网站删除自己的浏览器 cookie?

标签: javascript jquery cookies setcookie


【解决方案1】:

我可能误解了您问题中的某些内容,但这是我处理获取、设置和删除我设置的 cookie 的方式。

小提琴:https://jsfiddle.net/hmvyu3L6/

<button class='set'>set</button>
<button class='get'>get</button>
<button class='delete'>delete</button>

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = 'expires=' + d.toUTCString();
    document.cookie = cname + '=' + cvalue + '; ' + expires;
  }

  function getCookie(cname) {
    var name = cname + '=',
    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 '';
  }

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

  var value = 'hey there';

  $('.set').on('click', function() {
    setCookie('testCookie', value, 360);
  });

  $('.get').on('click', function() {
    console.log(getCookie('testCookie'));
  });

  $('.delete').on('click', function() {
    deleteCookie('testCookie');
  });

【讨论】:

    【解决方案2】:

    如果 cookie 是 HttpOnly,您将无法使用 javascript 或 jquery 删除它们。

    确保您的域和路径完全匹配。如果它们不同(例如 .subdomain.domain.com 而不是 .domain.com,或 /path 而不是 /),则脚本不会影响 cookie。

    【讨论】:

    • 您能否对此进行更多说明。例如:- 我的域是 www.env.helinco.com(var domain = location.hostname)我使用的是 path = '/'。我是否将路径更改为其他路径?
    • Cookie 既有域又有路径。您的浏览器可以为每个域和路径组合包含不同的 cookie。如果你想删除一个cookie,你需要设置一个新的cookie,它的过期日期与你要删除的cookie完全匹配,包括它的名称、域和路径。
    【解决方案3】:

    好的,我正在回答我自己的问题,因为我改变了一些东西,现在它可以工作了。

        var domain = location.hostname
    
        function setCookie(cookiename, cookievalue, expiredays, domain) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                var expires = "; expiredays=" + date.toGMTString();   
                document.cookie = cookiename+ "=" + cookievalue+ expires + "; domain=" + domain + "; path=/";
        }
    
    function deleteCookie(cookiename, domain) {
        setCookie(cookiename, "", -1, domain);
    }
    
    deleteCookie("Cookie_Name",domain)
    

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 2011-09-25
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      相关资源
      最近更新 更多