이름으로 쿠키를 삭제 하시겠습니까?


151

이름을 가진 특정 쿠키를 어떻게 삭제 roundcube_sessauth합니까?

다음은 안됩니다 :

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쿠키를 죽여 ?


1
name? 요점이 뭐야? 아니면 쿠키 이름을 지정할 수있는보다 다양한 버전의 숙취입니까?
paxdiablo

그것이 속임수라고 생각하지 마십시오. 특히 모든 쿠키 를 지우는 것에 대해 묻습니다 .
paxdiablo

1
쿠키를 모두 삭제하고 싶지 않습니다 ... 쿠키는 하나뿐입니다. 인터넷 검색에서 기본 코드를 찾았습니다. 그리고 물론 시도했습니다. @ Paxdiablo 쿠키의 이름을 지정한다고 가정했지만 완전히 잘못되었을 수 있습니다.
찰리

@paxdiablo -...How can I delete a specific cookie
Derek 朕 會 功夫

1
@Derek et al, 당신은 오해하는 것 같습니다. Gabe에서 제안한 속임수가 전혀 속박이 아니라고 말하면서 제안 된 속임수가 모든 쿠키 삭제에 대해 물었고이 질문에 특정 쿠키 삭제 에 대한 것이기 때문 입니다. 나는 어떤 식 으로든,이 모양에 대해 불평 하지 않았다 :-)
paxdiablo

답변:


252

올바른 쿠키를 삭제하려면 쿠키가 존재하는 경로를 정의해야합니다.

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;';
}

경로를 지정하지 않으면 브라우저는 현재있는 페이지를 기준으로 쿠키를 설정하므로 다른 페이지에서 쿠키를 삭제하면 다른 쿠키가 계속 존재합니다.

@Evan Morrison의 의견에 따라 편집하십시오.
경우에 따라 올바른 쿠키를 식별하려면 Domain매개 변수가 필요합니다.
일반적으로로 정의됩니다 Domain=.yourdomain.com.
재치 점을 이 쿠키는 하위 도메인에 존재 수 있다는 도메인 이름 수단의 앞에 ( www또한 하위 도메인으로 간주).

또한 @RobertT의 답변에서 언급했듯이 HttpOnly쿠키는 클라이언트 측에서 JavaScript로 삭제할 수 없습니다.


23
이것은 나를 미치게했다! Path = /를 추가 한 후 삭제할 수있었습니다. 감사!
duyn9uyen

12
이것은 정답이어야하며 Path대부분의 경우 가 없으면 작동하지 않습니다 .
SuperMarco

9
경로와 올바른 'Domain = value'를 모두 추가 할 때까지 쿠키를 삭제할 수 없었습니다. '... 내 문은 그래서 : document.cookie를 = "cookieName =; 경로 = /; 만료 = 1970년 1월 1일 (목) 그리니치 표준시 00시 00분 1초; 도메인 = .mydomain.com을"
에반 모리슨

1
이 솔루션은 여전히 ​​작동하지만 Max-Age=0그러한 것들에 관심이 있다면 약간 더 간결하게 작성할 수 있습니다 .
MaxPRafferty

181

쿠키를 삭제하려면 expires날짜를 과거의 것으로 설정하십시오 . 이를 수행하는 기능입니다.

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

그런 다음 roundcube_sessauth그냥 쿠키를 삭제하십시오 .

delete_cookie('roundcube_sessauth');

1
이것이 작동 해야한다고 생각합니다 (작동해야합니다 : D!).하지만 파이어 폭스에서 내 페이지에 설정된 쿠키를보고 있는데 "KILL"버튼을 클릭하면 쿠키가 삭제되지 않습니다. 왜 그런지 알아?
찰리

이것은 Chrome에서 작동합니다. Firebug를 설치하고 오류가 있는지 확인하십시오.

1
오류가 없습니다. Roundcube에서 쿠키를 삭제하지 않는 것 같습니다. 아마 다른 쿠키를 잘 지울 것입니다.
찰리

39
이 질문에 대한 답변을 찾고있는 사용자는 아래 답변을 참조하십시오. 이 path=/키는 브라우저 호환성에 중요합니다.
bencripps 2016 년

2
이 답변은 Chrome에서 작동하지 않으며 Firefox에서 시도하지 않았습니다. 그러나 아래의 emii의 대답은 효과가있었습니다.
Daniel F

11

// 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 의미
bhurlow

그래 .. exMins .. 감사 #BhBh에 대신 이름 바꾸기 인수 exdays
Kishor 파틸

7

이것이 5 월 12 일의 Roundcube 버전의 상황인지는 잘 모르겠지만 현재 답변은 roundcube_sessauth로 표시되어 있으므로 JavaScript에서 쿠키를 삭제할 수 없다는 것입니다 HttpOnly. 이것은 JS 클라이언트 측 코드에서 액세스 할 수 없으며 서버 측 스크립트 또는 직접 사용자 작업 (통합 디버거 또는 플러그인과 같은 일부 브라우저 메커니즘을 통해)으로 만 제거 할 수 있음을 의미합니다.


1

이 솔루션을 시도해 볼 수 있습니다

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

0

제 경우에는 다른 환경에 블로우 코드를 사용했습니다.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.