| JavaScriptって…? | JavaScript応用のツボ | ブラウザについて | JavaScript Market 利用規程 | JavaScript 各種サンプル | JavaScript 小技集 |
汎用クッキー関数
■ 2002,01,21 汎用性を強化、関数を簡略化
■ 2003,06,25 Gecko に対応汎用のクッキー関数です。
この関数を使用することで、 簡単に来訪者のブラウザにデータを書き込んだり読み込んだりできます。
関数実行時にクッキー名を指定するので、1つの関数で複数のクッキーデータを扱えます。
尚、スクリプトを簡略化する為、IE3/Netscape3以下のバージョン及び、
2000年問題に対応していないブラウザに対応するルーチンは省略しています。
古いブラウザへの対応が必要な場合はJavaScript小技集#3等を参考に工夫して下さい。■ 汎用クッキー関数のソース
<script> // クッキーの有効日数 days = 1; function get_cookie(cn) { get_data = document.cookie; cv = new Array(); gd = get_data.split(";"); for (i in gd) { a = gd[i].split("="); a[0] = a[0].replace(" ",""); cv[a[0]] = a[1]; } if (cv[cn]) return cv[cn]; else return ""; } function set_cookie(cn,val) { ex = new Date(); ex = new Date(ex.getTime() + (1000 * 60 * 60 * 24 * days)); y = ex.getYear(); if (y < 1900) y += 1900; hms = ex.getHours() + ":" + ex.getMinutes() + ":" + ex.getSeconds(); p = String(ex).split(" "); ex = p[0] + ", " + p[2] + "-" + p[1] + "-" + y + " " + hms + " GMT;"; document.cookie = cn + "=" + val +"; expires=" + ex; } // Copyright (C) 2001-2002 suepon , All rights reserved. // Script found at http://suepon.com/ </script>この関数を<head></head>内に貼り付け、
get_cookie(cookie_name); を実行するとクッキーデータが任意の変数に代入されます。
下の例では、test という名前を付けたクッキーデータをget_data という変数に代入する例です。
<script> /* クッキーデータを読み込み、任意の変数にクッキーデータを代入 */ get_data = get_cookie("test"); </script>又、クッキーに付ける名前と書き込みたいデータを引数として
set_cookie(cookie_name,set_data); に渡すとクッキーの書き込みを行います。
下の例では、内容を代入した変数 set_data を、test という名前を付けて書き込みます。
<script> /* 変数 set_data に書き込みたい内容を代入 */ set_data = "cookie data [" + new Date() + "]"; /* データをクッキーに書き込み */ set_cookie("test",set_data); </script>クッキーは、ブラウザを介して来訪者のローカルディスクにデータを記憶させるものです。
クッキーデータは、基本的に書き込んだURLでしか読み込むことができないようにブラウザがガードしています。
クッキーデータの保存先はWindowsでIEなら C:\WINDOWS\Cookies にテキスト形式で格納され、
テキストエディタ(メモ帳等)で自由に見る事ができますが、
これをエディタで書き変えたりすると自動的に破壊され、改ざんできない仕組みになっています。
クッキーを使ってデータを保存するということは、来訪者のハードディスクを間借りする様なものですので、
データはできるだけ小さくまとめ、読み込んでからJavaScriptで使える形に整形するようにして下さい。又、日本語をクッキーに書き込む場合、IEでは問題有りませんが、
Netscapeでは文字化けするので、escape()を使ってエンコードし、
読み込んでから unescape()でデコードしてやる必要があります。
<script> /* 取得した内容をデコード */ get_data = get_cookie("test"); get_data = unescape(get_data); /* 内容をエンコードして書き込み */ set_data = "あいうえお"; set_data = escape(set_data); set_cookie("test",set_data); </script>