按名称删除 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?的主要内容,如果未能解决你的问题,请参考以下文章