按名字删除 cookie?

如何删除名为 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饼干?

390939 次浏览

为了删除一个 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');

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

您应该定义存在 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.example。 在域名前面放置一个 意味着这个 cookie 可能存在于任何子域(www也算作子域)。

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

//如果传递了 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.

你可以试试这个方法

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

在我的案例中,我使用了不同环境的吹码。

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

对于 Cookies,您可以引用此 Cookie 文档

用于在 js 中设置带域的 cookie:

 function setCrossSubdomainCookie(cookieName, cookieValue, minutes) {
const assign = `${name}=${escape(value)};`
const d = new Date()
d.setTime(d.getTime() + minutes * 60 * 1000)
const expires = `expires=${d.toUTCString()};`
const path = "path=/;"
const domain = "domain=.domainName.example;"
document.cookie = assign + expires + path + domain
}

用于删除 js 中带域的 cookie:

export async function deleteCookie(name) {
document.cookie = `${name}=; path=/; domain=.edyst.com; expires=${new Date(
0
).toUTCString()}`
}

注意: 我们不能存储 Cookie 没有到期时间,但域是可选的,可以排除,如果想存储 Cookie 长期或不希望您的 Cookie 过期,然后使用这一点,而设置 Cookie

 const expires = "expires=Fri, 31 Dec 9999 23:59:59 GMT"
function deleteCookieByName(name) {
let newCookie = document.cookie.replace(new RegExp(`${name}=[^ ]*( )?`), '');
document.__defineGetter__("cookie", function() {return newCookie} );
}