Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

라이믹스 코어의 다크모드 쿠키를 삭제하기 쉽게 버튼을 제공했는데요.

 

게시글 열람 페이지에서는 쿠키가 삭제가 안됩니다.

 

삭제하는 html과 스크립트는 레이아웃에 위치합니다. 

 

<a class="del_night_mode">야간모드 자동 사용하기</a>

<script>
jQuery(function($) {
$(".del_night_mode").click(function(){ 
$.removeCookie("rx_color_scheme");
alert('이제 브라우저 야간모드에 따라 자동으로 사이트 야간모드가 작동합니다.');
location.reload();
})
});
</script>

 

위 코드가 있는 레이아웃 위치에 ({$_COOKIE['rx_color_scheme']}) 를 넣고 모니터링 해 봐도 게시글 열람페이지에서도 해당 쿠키 값이 잘 출력이 됩니다. 지워지지는게 안되고 있습니다.

 

페이지,게시판목록 등 전부 다 쿠키삭제가 됩니다. 

그런데 유독 게시글 열람 페이지에서 실행하면 메시지도 뜨고 새로고침도 되지만 해당 쿠키가 지워지지 않습니다.

 

콘솔에 에러 같은 것은 따로 없습니다.

 

 

콘솔에 에러는 아닌데 

rhymix.min.js?20210501095225:11 DEPRECATED : xGetElementById() is deprecated in Rhymix.

이런 메시지가 눈에 띄긴 하네요.

  • ?
    $.removeCookie('rx_color_scheme', { path: '/' });

    콘솔에 쳐보니 게시글 페이지에서는 path 까지 지정해줘야 동작하는 것 같습니다.
  • ? profile

    혹시 이유를 알 수 있을까요???? 게시글 열람페이지만 그렇다면 뭔가 이유가 있을 것 같고 이유를 알면 앞으로 뭔가 막히지 않고 해결 할 수 있을 것 같아서요.

     

    - 알려주신대로 path까지 적어주니 잘 됩니다. 감사합니다.

  • profile ?
    https://offbyone.tistory.com/176
    검색해보니 '쿠키 삭제시 생성할때와 같은 path와 domain 을 사용해야 합니다.' 라고 하는데요..
    아마도 이것과 관련이 있지 않을까 싶네요.
  • profile profile

    Delete cookie:

    // Returns true when cookie was successfully deleted, otherwise false
    $.removeCookie('name'); // => true
    $.removeCookie('nothing'); // => false

    // Need to use the same attributes (path, domain) as what the cookie was written with
    $.cookie('name', 'value', { path: '/' });
    // This won't work!
    $.removeCookie('name'); // => false
    // This will work!
    $.removeCookie('name', { path: '/' }); // => true
    Note: when deleting a cookie, you must pass the exact same path, domain and secure options that were used to set the cookie, unless you're relying on the default options that is.
    ====
    (https://github.com/carhartl/jquery-cookie에서 발췌)

    쿠키 삭제시 쿠키를 만들때 지정했던 path를 지정하지 않으면 기본값(아마 현재 주소 같습니다)를 사용한다고 합니다.

    그나저나 jquery cookie 라이브러리가 지원 중단 상태네요. js-cookie로 대체되었다고 합니다.

  • profile profile

    쿠키를 생성할때 path를 넣지 않아도 삭제시에 넣어야 하는건가요??

    라이믹스 코어에서 만들어주는 쿠키라 어떻게 생성되었는지도 확인해봐야겠네요..

  • profile profile
    코어에서 만드는 쿠키는 기본적으로 / path로 만들어집니다(경로 지정할 이유가 없으니) 따라서 제거시에도 명시해야 하는것이죠.

    http://www.editthiscookie.com/
    editthiscookie 사용하시면 현재 쿠키 목록이나 path 등 바로 확인 가능합니다. 타운의 경우 세션키 등 여러 쿠키가 생성되는데 모두 / path입니다.
  • profile profile
    네. 방금 쿠키 생성하고 확인해보니 / path로 만들어지는건 확인했습니다. 다른 경로에선 잘 되고 게시글 열람 페이지에서 안되는게 좀 이해는 안가지만 $.removeCookie('rx_color_scheme', { path: '/' }); 로 지워주면 문제는 안생기겠네요.

    설명 감사합니다.
  • profile

    글읽기 화면은 "https://domain.com/mid/1234" 와 같은 형태의 주소를 가지므로, 그 자리에서 쿠키를 굽거나 지우려고 하면 path는 "/mid/"가 기본값이 됩니다. 메인화면이나 게시판 목록 화면에서는 "/"가 되고요.

    짧은주소라는 개념이 등장하기 전, 실제로 폴더 아래에 파일들이 존재하고 그 파일 경로를 요청하던 시절에 만들어진 규칙이라 그렇습니다. 뭐 지금도 서브폴더마다 다른 솔루션을 설치하여 운영하는 것이 불가능하지는 않지요. 서브폴더에 RXE를 설치한 경우를 제외하면 path는 항상 "/"으로 넣어주는 것이 좋습니다.

  • profile profile
    설명 감사합니다. 쿠키를 기존에도 조금씩 다뤘었는데 새로운 사실을 배우게 되네요.