忍者ブログ

20Apr

[PR]

Posted by in

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

21May

Cookie

Posted by No Name Ninja in ブラウザのデータ保存

かなり古い技術だけど健在。
今ではセッションIDを格納してるだけかもしれませんが、「捨てられても構わない情報」(画面の一時的な操作情報など)を格納しておくには便利です。
SAMPLE
Firefox 12.0
Safari 5.0
Chrome 19.0
I.E. 9.0

基本的には、キーと値のペアの単純な構造。
それぞれのキーと値のペアに大して以下の項目を設定できる。
・path
・max-age
秒数で指定。
・expires
GMT形式の日付で表示
・secure
HTTPSでのみ送信可能となる。

クッキーで間違えやすいところ。
・上記オプションは、キーと値のペア単位で機能する。クッキー単位ではない。
なので、様々なキーと値のペアが異なる消失期限で生存可能。


<script>

window.onload=function(){
  if(navigator.cookieEnabled){
    document.getElementById('set').onclick = setCookie;
    document.getElementById('get').onclick = readCookie;
    document.getElementById('erase').onclick = eraseCookie;
  }
  document.getElementById('innerDiv').innerHTML = document.cookie;
}

function setCookie(){
  var cookie = document.getElementById('cookie').value;
  var value = document.getElementById('value').value;

  var futureDate = new Date();
  //expires設定
  var expire = document.getElementById('expire').value;
  futureDate.setSeconds(futureDate.getSeconds() + parseInt(expire));
 
  var tmp = cookie + '=' + encodeURI(value) + '; expires=' + futureDate.toGMTString() + '; path=/';
  document.cookie = tmp;


  document.getElementById('innerDiv').innerHTML = document.cookie;
}

function readCookie(){
  var key = document.getElementById('cookie').value;
  var cookie = document.cookie;
  var first = cookie.indexOf(key + '=');
 
  if(first >= 0){
    var str = cookie.substring(first,cookie.length);
    var last = str.indexOf(';');
    if(last < 0){
      last = str.length;
    }
    
    str = str.substring(0,last).split('=');
    alert(decodeURI(str[1]));
    
  }else{
    alert('none found');
  }
  document.getElementById('innerDiv').innerHTML = document.cookie;
}


function eraseCookie(){
  var key = document.getElementById('cookie').value;
  var cookieDate = new Date();
  cookieDate.setDate(cookieDate.getDate() -10);
  document.cookie = key + '= ; expires=' + cookieDate.toGMTString() + '; path=/';

  document.getElementById('innerDiv').innerHTML = document.cookie;
}

</script>

1.クッキーにキーと値ペアを設定。オプションでexpiresとpathを設定。
2.文字列操作でクッキーからキーと値を抽出する。セミコロン(;)で区切られたキーと値ペアなので、特筆なし。
3.クッキーからキーと値のペアを削除。過去の日付すれば自動的に消える。

ちなみにjavascriptのcookieのAPIはいまいちに感じる。
document.cookie = 変数
変数 = document.cookie
上記二つの値が異なってくる。cookieに対するAPIを自分でモジュール化しているほうがよさそう。

PR

Comment


Vodafone絵文字 i-mode絵文字 Ezweb絵文字