<script> // Cookie クラスインスタンス生成、名前は counter で有効期日は 7 日 var visitordata = new Cookie( "counter" , 7 ); // visits データが存在しない場合、visitordata のプロパティに visits を追加 if( visitordata.unload("visits") ) visitordata.visits = 0 ; // visits をインクリメント visitordata.visits++ ; // クッキーに格納 visitordata.store(); // 訪れた回数を書き出す document.write("You have visited "+visitordata.visits+" times."); </script><body> <!-- このボタンを押すとクッキーが削除される --> <form><input type="button" value="Forget Count" onClick="visitordata.remove();"></form> </body>
string $name ; // クッキーの名前 number $expiration ; // クッキーの有効期限[日] string $path ; // クッキーパス属性 string $domain ; // クッキーのドメイン属性 boolean $secure ; // クッキーのセキュリティ。保証が必要な場合 true Document $document ; // クッキーを格納する Document オブジェクト boolean $load ; // クッキーの読み込み状態難しそうですが、この中で入力必須なのは
$name
だけです。$expiration , $path , $domain , $secure
はクッキーの属性を表し、
これらについては 補足 で詳しく説明しています。
Cookie( string name , number expires , string path , string domain , boolean secure , Document document );ややこしそうですが、他クラスのコンストラクタと違い、 設定したくないところは入力しなくても良いようになっています。 例えば、name と expires だけ設定したい場合は
var cookie = new Cookie( "sample" , 30 );
var cookie = new Cookie( "sample" , 30 , "" , "" , true );
boolean load(); boolean load( string indexes );引数なしは $name で指定したクッキーの読み込みが成功した場合 true を返します。
boolean unload(); boolean unload( string indexes );load メソッドと逆の boolean 値を返します。 「読み込めなかったら」という方が使い易いので追加したメソッドです。
// クッキークラスのインスタンス生成 var visitordata = new Cookie( "counter" , 30 ); // count データが存在しない場合、visitordata のプロパティに count を追加 if( !visitordata.load( "count" ) ) visitordata.count = 0 ; // unload を使うと if( visitordata.unload( "count" ) ) visitordata.count = 0 ; // count をインクリメントする visitordata.count++ ; // クッキーに格納 visitordata.store();
void store();設定された値全てをクッキーへ格納します。
var visitordata = new Cookie( "data" , 30 ); // count データが存在しない場合、visitordata のプロパティに count を追加 if( visitordata.unload( "count" ) ) visitordata.count = 0 ; visitordata.count++ ; // color データが存在しない場合、visitordata のプロパティに color を追加 if( visitordata.unload( "color" ) ) visitordata.color = "#000000" ; // クッキーに count と color を格納 visitordata.store();
void remove();クッキーを削除します。
var visitordata = new Cookie( "data" , 30 ); // count データが存在しない場合、visitordata のプロパティに count を追加 if( visitordata.unload( "count" ) ) visitordata.count = 0 ; visitordata.count++ ; // クッキーに count 項目と count 値を格納 visitordata.store(); // データの削除、実際にはこんなことしないけど (^^); visitordata.remove();
void remove( string indexes );indexes で指定したデータのみを削除します。
var visitordata = new Cookie( "data" , 30 ); // count データが存在しない場合、visitordata のプロパティに count を追加 if( visitordata.unload( "count" ) ) visitordata.count = 0 ; visitordata.count++ ; // color データが存在しない場合、visitordata のプロパティに color を追加 if( visitordata.unload( "color" ) ) visitordata.color = "#000000" ; // クッキーに count 項目とその値、color 項目とその値を格納 visitordata.store(); // 格納した color 項目とその値を削除します。 visitordata.remove( "color" );
string toString(); string toString( boolean v );Cookie クラスの標準出力文字列を返します。
$name + " : " + (データ項目) + "=" + (その値) + ", " + ・・・
です。var cookie = new Cookie( "data" , 7 ); cookie.size = 7 ; cookie.color = "#000000" ; cookie.store(); status = cookie ; // 結果は data : size=7, color=#000000 等 status = cookie.toString( true ); // 結果は data=size:7&color:#000000; counter=・・・等など
型 | メソッド名 | 説明 |
---|---|---|
boolean | load | クッキーの読み込み |
boolean | unload | クッキーの読み込み |
void | store | クッキーへ格納 |
void | remove(引数なし) | クッキーの削除 |
void | remove(引数あり) | 項目の削除 |
string | toString | 標準出力文字列 |
$expiration,$path,$domain,$secure
がありましたが、これらはクッキーの属性を表し、それぞれ、expires 属性、path 属性、domain 属性、secure 属性に対応しています。以下は「JavaScript 3RD」という書籍からの引用です。
1つのクッキーには、寿命、表示/非表示の指定、セキュリティを制御するための省略可能な属性が4つあります。個人で使う分には expires 属性と path 属性だけ覚えておけば良いでしょう。1番目の属性はクッキーの寿命を指定する expires 属性です。デフォルトとしては、クッキーの寿命は一時的であると設定されています。この場合Webブラウザのセッション中はクッキーの値が保持されますが、ユーザがブラウザを終了すると、クッキーの値も削除されます。このセッション期間を超えてクッキーを使いたい場合は、expires 属性に有効期限を指定します。有効期限を設定しておくと、ブラウザがクッキーをローカルファイルに保存してくれます。これで、ユーザが同じWebページにアクセスしたときに、元のクッキーが復元されます。有効期限が切れると、クッキーは自動的に削除されます。
2番目の属性は、クッキーに関連付けられたWebページを示す path 属性です。クッキーに関連付けられアクセスが許されるWebページというのは、特に指定がなければ、そのクッキーを生成したWebページ、同じディレクトリ内にあるほかのWebページ、同じディレクトリ内のサブディレクトリにあるWebページになります。
このことは、一般的に望ましいといえるでしょう。しかし、どのWebページがクッキーを作成したかどうかにかかわらず、マルチページのWebサイト全体でクッキー値を使いたい場合もあるでしょう。例えば、あるページのあるフォームでユーザがアドレスを入力したとしましょう。ユーザが次回そのページにアクセスしたときにそのアドレスをデフォルトとして使うために保存し、そのユーザがほかのページのフォームでアドレスの入力を要求された場合にデフォルトとして使用したいと考えるでしょう。そのような場合に、クッキーの path 属性を指定します。こうすると、指定されたパスがURLに含まれるWebページでこのクッキーが共有できます。例えば、あるWebページ ( http://www.hogehoge.com/foo/boo/index.html ) によって設定されたクッキーの path 属性に "foo" が設定されていた場合、このクッキーは http://www.hogehoge.com/foo/index.html からも見ることができます。path 属性に '/' が設定されていた場合、www.hogehoge.com サーバ上の全てのページから見ることができます。
デフォルトでクッキーにアクセスできるのは、そのクッキーを設定したWebサーバーと同じWebサーバーのページに限られます。しかし、大規模なWebサイトの場合は、複数のWebサーバ全体でクッキーを共用したいことがあります。例えば、ドメイン aiueo.hogehoge.com にあるサーバがドメイン abcde.hogehoge.com からクッキー値を読み出したい場合は、どうすれば良いのでしょうか。
3番目の domain 属性がここで登場します。ドメイン abcde.hogehoge.com にあるページで作成されたクッキーの path 属性に '/'、domain 属性に ".hogehoge.com" が設定されたいた場合、ドメイン aiueo.hogehoge.com 上の全てのページ、ドメイン abcde.hogehoge.com 上の全てのページ、ドメイン hogehoge.com 上にあるほかの全てのサーバにあるページからこのクッキーにアクセスできます。domain 属性が省略された場合は、対応するWebサーバーのホスト名が設定されます。尚、自分サーバのドメイン以外の名前をクッキーの domain 属性に設定することは出来ません。
4番目の属性は、secure 属性です。secure 属性は、ネットワークを経由してクッキーを送る方法を規定した論理値です。デフォルトは、クッキーの安全性を保証しない設定になっています。これは、安全性が保証されない通常のHTTP接続経由でクッキーがやり取りされるという意味です。secure 属性に secure が設定されている場合、HTTPSなどの安全性が保証されたプロトコルでブラウザとサーバが接続された状態でのみクッキーがやり取りされます。
load( "count|color" );
という風に書きます。この場合、一つでも存在しないものがあれば false が返されます。remove() メソッドも同じです。remove("count|color");
とかいう風に書きます。
1.Cookie クラスのインスタンスを名前($name)を付けて作成(new)する。
2.クッキーを読み込むが、そのとき項目があるか調べ、なかったら設定する。
3.設定した項目とその値をクッキーに格納する。
<script> // 1 の処理。名前は "favoritecolor" で、有効期限は 10 日としている。 var data = new Cookie( "favoritecolor" , 10 ); // 2 の処理。color という項目がなかったら、ユーザにデータ入力を求める。 // ここが他のものとの大きな違いで、項目を追加するとき data.* という形でプロパティに追加する。 // この時点ではクッキーの中身は何も変化しない。 if( data.unload( "color" ) ) data.color = prompt( "What is your favorite color ?" , "" ); // 3 の処理。ここで初めてクッキーに格納される。 // 格納される値はインスタンスに含まれる全てのプロパティ名とその値。 // 例えばこの場合であれば、項目は color で値は red 等 data.store(); // 背景色に設定 document.bgColor = data.color ; </script>
if( data.unload( "sample" ) )
とし、data.sample
という形でプロパティを追加するということになります。そして、クッキーへ格納するときは data.store()
です。data.remove( "color" );