忍者ブログ

10Oct

[PR]

Posted by in

×

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

22May

SessionStorage

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

クッキーはブラウザ単位でデータを保存してくれるが、ウィンドウ、タブ単位でデータを管理する手法です。
SAMPLE
厳密に言うとHTTPセッション単位でデータ管理します。
Firefox 12.0 ○
Safari 5.0 ○
Chrome 19.0 ○
I.E. 9.0 ○



・SeesionStrageについて
HTTPセッション単位でデータ管理します。
クッキーのような有効期限などのオプション設定はない。
※新しいウィンドウ、タブとして開いた場合
ほとんどのブラウザがデータを消失します。が、I.E.9の場合は残すようです。

※新しいタブとしてい開いた場合
Firefox 12.0 データ消失
Safari 5.0 データ消失
Chrome 19.0 データ消失
I.E. 9.0 データ継続



<script type="text/javascript">
window.onload=function(){
  document.getElementById('set').onclick = setData;
  document.getElementById('get').onclick = getData;
  document.getElementById('erase').onclick = removeData;

  document.getElementById('innerDiv').innerHTML = document.cookie;
  document.getElementById('innerDiv2').innerHTML = joinSessionStrage();

}

function setData(){

  var key = document.getElementById('key').value;
  var value = document.getElementById('value').value;
 
  sessionStorage.setItem(key,value);
  setCookie(key,value);

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

function getData(){

    var key = document.getElementById('key').value;
    
    var alertStr;

    var value = sessionStorage.getItem(key);
    if(!value){
      value = '';
    }
    alertStr = '【sessionStrage:】' + value + '\n\r';
    
    value = getCookie(key);
    if(!value){
      value = '';
    }
    alertStr += '【cookie:】' + value;

    alert(alertStr);
}

function removeData(){
  var key = document.getElementById('key').value;
  sessionStorage.removeItem(key);
  eraseCookie(key);

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

function joinSessionStrage(){
  var str = '';
  for(var i = 0; i<sessionStorage.length;i++){
    var curKey = sessionStorage.key(i);
    str += curKey + '=' + sessionStorage.getItem(curKey) + ';';
  }

  return str;
}



function setCookie(key,value){
  //expires設定
  var futureDate = new Date();
  futureDate.setSeconds(futureDate.getSeconds() + 3000);
 
  var tmp = key + '=' + encodeURI(value) + '; expires=' + futureDate.toGMTString() + '; path=/';
  document.cookie = tmp;

}

function getCookie(key){
  var cookie = document.cookie;
  var first = cookie.indexOf(key + '=');

  if(first < 0){
    return null;
  }

  var str = cookie.substring(first,cookie.length);
  var last = str.indexOf(';');
  if(last < 0){
    last = str.length;
  }
 
  str = str.substring(0,last).split('=');
  return (decodeURI(str[1]));
}

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

1.データを設定します。
2.データを取得します。
3.データを削除します。
4.データを繰り返し文で全て取得しています。

※その他
firefoxの場合、ローカルのHTMLとしてテストするとエラーが発生します。
"Operation is not supported"
サーバーにアップすれば問題ありません。
PR

Comment


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