0

javascriptcookieでデモテストを実行しようとしています。私がテストのために書いた以下のコードを見つけてください。

<html>
<head>
<script type='text/javascript' >

function setcookie()
{   
    alert("check if cookie avail:" +document.cookie.split(';'));
    var dt=new Date();

    document.cookie='name=test';
    document.cookie='expires='+dt.toUTCString()+';'
    alert("now cookie val:" +document.cookie.split(';'));

    dt.setDate(dt.getDate()-1);
    document.cookie = "expires=" + dt.toUTCString() + ";"
    alert("after deletion cookie val:" + document.cookie.split(';'));
 }
</script>

</head>
<body>
    <input id='txt' onchange='setcookie()' />
</body>
</html>

コードは次のように機能します、

最初に、これはそのブラウザにすでに存在するCookieを表示します。次に、1日の有効期限でCookieを「name=test」として設定しようとします。アラートを使用すると、そのCookieに設定されている値を確認できます。次の行では、有効期限を現在の日付-1に設定してCookieを削除しようとしています。アラートを使用してCookieの値を出力すると、Cookieは有効期限がcurrentdate-1として表示されます。

私の質問は、

  1. Mozillaで、ブラウザを更新して同じ手順を実行しようとすると、最初のアラートに、有効期限がcurrentdate-1であるCookie値が表示されます。スクリプトの最後の行で削除してもCookieの値を取得するのはなぜですか。ただし、ブラウザを閉じると、Cookieの値は空になります。なぜそうなのですか?
  2. Chromeでは、同じコードを実行すると、どちらのCookieも設定されません。ChromeブラウザでCookieを設定できないのはなぜですか。

このような違いがブラウザ間で発生する理由を教えてください。

4

1 に答える 1

1

これは有効期限を設定していません

document.cookie='name=test';
document.cookie='expires='+dt.toUTCString()+';'

これは

document.cookie='name=test; expires='+dt.toUTCString()+';'

最善の方法は、十分にテストされた Cookie コードを取得し、それを使用することです

これを試すか、jQueryを使用している場合はjQueryプラグインを使用してください

// cookie.js file
var daysToKeep = 14; // default cookie life...
var today      = new Date(); 
var expiryDate = new Date(today.getTime() + (daysToKeep * 86400000));


/* Cookie functions originally by Bill Dortsch */
function setCookie (name,value,expires,path,theDomain,secure) { 
   value = escape(value);
   var theCookie = name + "=" + value + 
   ((expires)    ? "; expires=" + expires.toGMTString() : "") + 
   ((path)       ? "; path="    + path   : "") + 
   ((theDomain)  ? "; domain="  + theDomain : "") + 
   ((secure)     ? "; secure"            : ""); 
   document.cookie = theCookie;
} 

function getCookie(Name) { 
   var search = Name + "=" 
   if (document.cookie.length > 0) { // if there are any cookies 
      var offset = document.cookie.indexOf(search) 
      if (offset != -1) { // if cookie exists 
         offset += search.length 
         // set index of beginning of value 
         var end = document.cookie.indexOf(";", offset) 
         // set index of end of cookie value 
         if (end == -1) end = document.cookie.length 
         return unescape(document.cookie.substring(offset, end)) 
      } 
   } 
} 
function delCookie(name,path,domain) {
   if (getCookie(name)) document.cookie = name + "=" +
      ((path)   ? ";path="   + path   : "") +
      ((domain) ? ";domain=" + domain : "") +
      ";expires=Thu, 01-Jan-70 00:00:01 GMT";
}
于 2013-02-02T08:28:49.143 に答える