按名称删除 cookie?

Posted

技术标签:

【中文标题】按名称删除 cookie?【英文标题】:Delete cookie by name? 【发布时间】:2012-05-22 12:12:54 【问题描述】:

如何删除名为 roundcube_sessauth 的特定 cookie?

不应该如下:

function del_cookie(name) 
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
 

然后:

<a href="javascript:del_cookie(name);">KILL</a>

杀死roundcube_sessauth cookie?

【问题讨论】:

name?那有什么意义呢?或者它是一个更通用的版本的遗留物,它允许你指定 cookie 名称? 不要认为这是骗人的。它专门询问清除 所有 cookie。 我不想删除所有的cookies...只有一个。我通过谷歌搜索找到了基本代码。当然我试过了。 @Paxdiablo 我以为它是为了命名 cookie,但我可能完全错了。 @paxdiablo - How can I delete a specific cookie... @Derek 等人,您似乎误解了。我是说 Gabe 提议的欺骗根本不是欺骗,因为提议的欺骗询问有关删除 all cookie 的问题,而这个问题询问有关删除 specific cookie 的问题。我没有以任何方式、形状或形式抱怨这个问题:-) 【参考方案1】:

您应该定义 cookie 存在的路径,以确保删除正确的 cookie。

function set_cookie(name, value) 
  document.cookie = name +'='+ value +'; Path=/;';

function delete_cookie(name) 
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';

如果您不指定路径,浏览器将设置一个相对于您当前所在页面的 cookie,因此如果您在其他页面上删除该 cookie,另一个 cookie 将继续存在。

根据@Evan Morrison 的评论进行编辑。 请注意,在某些情况下,要识别正确的 cookie,Domain 参数是必需的。 通常定义为Domain=.yourdomain.com。 在您的域名前放置一个 dot 意味着此 cookie 可能存在于任何子域(www 也算作子域)。

另外,正如@RobertT 的回答中提到的,HttpOnly cookie 无法在客户端使用 JavaScript 删除。

【讨论】:

这把我逼疯了!添加 Path=/ 后,我就可以删除了。谢谢! 这应该是正确的答案,大多数情况下没有Path是不行的。 在添加路径和正确的 'Domain=value; 之前,我无法删除 cookie; ' ...所以我的声明是:document.cookie = "cookieName= ; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=.myDomain.com" 这个解决方案仍然有效,但如果你关心这些事情,可以用Max-Age=0写得更简洁一些。【参考方案2】:

为了删除 cookie,请将 expires 日期设置为过去的某个时间。执行此操作的函数将是。

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

然后删除一个名为roundcube_sessauth的cookie就行了。

delete_cookie('roundcube_sessauth');

【讨论】:

我觉得这 应该 工作(它看起来应该工作:D!),但我正在查看我的页面在 Firefox 中设置的 cookie,当我单击“杀死”按钮,cookie 不会被删除。知道为什么吗? 这适用于谷歌浏览器。安装firebug,看看有没有错误。 没有错误,我猜它只是没有删除 Roundcube 中的 cookie。它可能会很好地删除其他cookie。 对于寻找此问题答案的用户,请参阅下面的答案。 path=/ 键对于浏览器兼容性很重要。 这个答案在 Chrome 上对我不起作用,在 Firefox 中没有尝试过。但是emii在下面的回答确实有效。【参考方案3】:

//如果传递了exMins=0,它会在创建后立即删除。

function setCookie(cname, cvalue, exMins) 
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";


setCookie('cookieNameToDelete','',0) // this will delete the cookie.

【讨论】:

exMins 在此示例中未定义,您可能是指 exdays 是的.. 而是将参数 exdays 重命名为 exMins.. 谢谢#BhBh【参考方案4】:

我不确定这是否是 12 年 5 月 Roundcube 版本的情况,但对于当前版本,答案是您不能从 JavaScript 中删除 roundcube_sessauth cookie,因为它被标记为 HttpOnly .这意味着它不能从 JS 客户端代码访问,只能通过服务器端脚本或直接用户操作(通过某些浏览器机制,如集成调试器或某些插件)来删除。

【讨论】:

【参考方案5】:

你可以试试这个解决方案

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;" + expires;

【讨论】:

【参考方案6】:

在我的例子中,我为不同的环境使用了打击代码。

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.$document.domain.split('.').splice(1).join('.')`;

【讨论】:

以上是关于按名称删除 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 按名称获取Cookie

java - 在spring mvc中按名称获取cookie值

按名称删除唯一约束

Julia DataFrame:按名称删除列

如何按特定主体名称删除现有会话

sh 按名称查找和删除文件