- HOME
- JavaScript入門
- cookie.jsを作ってみる
前のページまでで、cookieファイルの読み書きと削除方法について見てきました。 cookie編の最後では、cookie関連の関数を一つの外部ファイルにまとめて、 複数のページからでも楽に使えるようにしてみたいと思います。
cookie書き込み関数
最初にcookie書き込み関数を作ってみたいと思います。以下のようにしてみました。
function ckSave(nam,val,term) { if (navigator.cookieEnabled) { var date = new Date(); try { term = parseInt(term); } catch(e) { term = 30; } date.setTime(date.getTime()+term*24*60*60*1000); document.cookie = nam+"="+escape(val)+";expires="+date.toGMTString(); return true; } else { return false; } }
関数名は「ckSave」、引数は順に「項目名」,「値」,「有効期限(日数)」です。
if文でcookieが使用可能か調べて、 可能なら日付データdateを作成します。 有効期限は数値で指定しても、引数を介して値を受け取ると数値ではなくなることがあるので、 parseInt()を使って数値に変換します。数値変換に失敗した場合は、期限を30日に設定し直します。 そして有効期限の日数をプラスした日付データに書き換えます。
そしてcookieを書き込みますが、注意点が2つありました。 値はescape文字に変換することと、日付データはGMTに変換するという2点です。
書き込みが成功したか調べるために、returnを使ってtrueもしくはfalseを呼び出し元に返します。 ということで、cookieを書き込む際にはif文を使って書き込みに成功したか調べると良いでしょう。
if ( ckSave("count",10,30) )
{
alert("データを保存しました!");
}
else
{
alert("データ保存に失敗しました!");
}
cookie読み込み関数
今度はcookieを読み込む関数を作ってみます。 こちらはreturnを使って「値」を呼び出し元に返すようにしてみました。
function ckLoad(nam) { if (navigator.cookieEnabled) { var cook = document.cookie + ";"; var cStart,cEnd; nam=nam+"="; cStart = cook.indexOf(nam,0); if (cStart == -1) { return "nodata"; } else { cEnd = cook.indexOf(";",cStart); return unescape(cook.substring(cStart+nam.length,cEnd)); } } else { return "nodata"; } }
関数名は「ckLoad」、引数は「項目名」の1つです。
最初にcookieが使用可能か調べます。 不可の場合はreturnで「nodata」という文字列を返すようにしています。
使用可能なら変数cookにcookieデータを読み込ませます。 そして引数「nam」に「=」を追加してから、indexOf()を使って検索しています。 検索結果が「-1」であれば、やはりreturnで「nodata」を返します。
項目名がcookieデータ内にあれば、今度は終了記号「;」を検索し、 substring()で値部分を切り取ります。 この時切り取り開始位置は、変数namの文字数だけプラスしなければなりません。 lengthを使って文字数を取得しています。
最後にunescape()でescape文字を普通の文字に戻しています。
cookieを読み出すには、以下のようにします。
var cnt = ckLoad("count"); if ( cnt != "nodata" ) { try { cnt=parseInt(cnt)+1; document.write(cnt+"回目の訪問です。"); } catch(e) { } } else { document.write("初めての訪問です。"); }
cookie削除関数
最後は、cookie削除関数を作ってみましょう。 やはり削除に成功したかどうか確認できるよう、returnでtrueかfalseを返すようにしています。
function ckDelete(nam) { if ( navigator.cookieEnabled ) { var date = new Date(); date.setTime(0); document.cookie=nam+"=;expires="+date.toGMTString(); return true; } else { return false; } }
関数名は「ckDelete」,引数は「削除したい項目名」を指定できるようにしています。
cookieが使用可能か調べて、可能なら過去の日付データを作成し、 それを有効期限に指定して書き込みを行います。 書き込みができたらtrueを返し、できない時はfalseを返すようにしています。
cookie.jsの完成
では、上記の関数ckSave(),関数ckLoad(),関数ckDelete()を一つのファイルにコピペして、 「cookie.js」というファイル名で保存しましょう。 これでcookie関数をまとめて扱うことができます。
このcookie.jsを任意のページで読み込めば、簡単にcookieを読み書きできます。 簡単なサンプルを作っていますのでご確認ください。