Cookieでの一次判定


概要

初回エリア判定時に取得したエリア等の情報をCookieに書き込んでおき、二回目以降はCookieを参照した結果に基づいて判定をさせるサンプルです。ネットワークのトラフィック量をコントロールしたい場合や、APIサーバへのリクエスト回数を極力抑えたい場合などに役立ちます。

ソースコード

Cookieを利用してコンテンツを制御するには、ファイルの読み込み時と、読み込み完了時の2回のタイミングでスクリプトを実行をさせる必要があります。以下は、都道府県別に画像を切り替える一例です。

                var prefCode = getCookie( "prefCode" ); // Cookieから「prefCode」の値を取得
                if ( !prefCode || !prefCode.match(/^0[1-9]|[1-3][0-9]|4[0-7]$/) ) {     // prefCodeの値が正しいか確認
                    // 値がない、もしくは正しくない
                    document.write( '<script type="text/javascript" src="http://api.docodoco.jp/v3/docodoco?key=APIキー" charset="utf-8"></sc'+'ript>' );      // どこどこJPを呼び出す
                    prefCode = "";
                }
                
                
                addEvent( window, "load", function() {  // onLodeイベントハンドラに登録
                    if ( !prefCode ) {  // prefCodeの値がない(Cookieに値が無い)
                        if ( prefCode = SURFPOINT.getPrefCode()) {      // どこどこJPの都道府県コードを取得
                            regCookie( "prefCode", prefCode, 30 );      // Cookieに保存期間30日として登録
                        }
                        else {                  // 都道府県コードが取得出来ない
                            prefCode = "13";    // 代替えコードを指定(13:東京)Cookie保存はしない
                        }
                    }
                    document.getElementById("id要素").src = "image_pref" + prefCode + ".jpg";   // 指定したid要素の画像を書き換える
                    // 画像ファイルは都道府県ごとに用意しておく。「image_pref01.jpg ~ image_pref47.jpg」
                });
                
                
                // イベント登録関数
                function addEvent( elm, listener, fn ) {
                    try {
                        elm.addEventListener( listener, fn, false );
                    } catch( e ) {
                        elm.attachEvent( "on"+listener, fn );
                    }
                }
                
                
                // Cookie読み込み関数
                function getCookie( key ) {
                    var cookie = document.cookie;
                    var tmp = cookie.split(";");
                    var oExp = new RegExp(" ", "g");
                    key = key.replace(oExp, "");
                    
                    var i = 0;
                    while (tmp) {
                        var word = tmp[i].split("=");
                        word[0] = word[0].replace(oExp, "");
                        if (key == word[0]) return unescape(word[1]);
                        if (++i >= tmp.length) break;
                    }
                    return "";
                }
                
                
                // Cookie登録関数
                function regCookie( key, value, expires ) {
                    if ( !expires ) {   expires = 1;    }
                    var exp = new Date();
                    var plusDay = 1000*60*60*24*expires;
                    exp.setTime( exp.getTime()+plusDay );
                    document.cookie = key+"="+escape( value )+"; expires="+exp.toGMTString();
                }
            

デフォルトでは、Cookieに書き込まれた情報は30日間で破棄される設定になっていますが、これはどこどこJPが最新データに毎月1回アップデートをするため、最適な判定を維持する為の推奨設定です。



Page Top