JavaScriptによるcookieが有効か無効かの判定


cookieが有効か無効かの判定の際に、IEとEdgeだけうまくいかなかったので対処法のメモになります。自分用ですが誰かの役に立てば幸いです。

IEおよびEdge以外

「cookie javasicrpt 無効 判定」などでググると"navigator.cookieEnabled"による判定の記事をよく目にします。しかしChrome、Firefox、Safariは判定できるのですが、IEとEdgeはcookieをブロックにしても"true"が返ってきてしまいました。


if(navigator.cookieEnabled){
  //cookie 有効
}else {
  //cookie 無効
}

DEMO1
※ cookieの設定を切り替えてお試しください、IEおよびEdgeでご覧ください。

対処方法


var setCookie = function(cookieName, value){
  var cookie = cookieName + "=" + value + ";";
  document.cookie = cookie;
}

var getCookie = function(cookieName){
  var l = cookieName.length + 1 ;
  var cookieAry = document.cookie.split("; ") ;
  var str = "" ;
  for(i=0; i < cookieAry.length; i++){
    if(cookieAry[i].substr(0, l) === cookieName + "="){
      str = cookieAry[i].substr(l, cookieAry[i].length) ;
      break ;
    }
  }
  return str;
}

setCookie('check_cookie', true);
var val = getCookie('check_cookie');

if(val) {
  //cookie 有効
} else {
  //cookie 無効
}

あらかじめcookieと値をセット。
値が返ってきたら有効、返ってこなければ無効と判別します。

DEMO2
※ edgeはcookieの設定を変更した後ブラウザの再起動が必要です。

対処方法(jQuery)


function setCookie(cookieName, value){
  $.cookie(cookieName, value);
}

function getCookie(cookieName){
  var c = $.cookie();
  var str = '';
  for(key in c){
    if(key === cookieName){
      str = c[key];
    }
  }
  return str;
}

jquery.cookie.jsを使い、setCookieとgetCookieをそれぞれ書き直してみました。
ソースも簡潔になり、特別な理由がない限りはjQueryで十分そうです。