クッキーの基本的な仕組みを知ろう


前回、「セッション」というものを使ってデータをやり取りする方法について説明をしましたが、このセッションは「サーバーとクライアントの間の連続した接続」を示すものでした。ですから、接続が切れれば、当然ですがセッションは失われてしまいます。例えば長時間そのサイトにアクセスしなかったり、Webブラウザを終了したりするとセッションはなくなってしまうのです。

ですが、「ブラウザを終了した後も値を保ち続けて欲しい」ということはあります。こうした場合はどうすればよいのでしょうか。現在のところ、それを可能にするものは一つしかありません。それは「クッキー」です。

クッキーとは何か?ということは、改めて説明するまでもないでしょう。Webブラウザに記憶しておくことのできる、ちょっとした情報、それがクッキーですね。ブラウザでクッキー情報を調べてみれば、さまざまなサイトのクッキーが保管されているのがわかるはずです。

Firefoxでクッキー情報を表示したところ。ブラウザにはさまざまなサイトのクッキーが保管されている。


このクッキーというものに保管できるのは、ごく簡単なテキストのみです。例えば「グラフィックデータを保管したい」なんていうことはできません。あくまで「ちょっとした情報」だけなのです。ですからやれることには限りがありますが、少なくともブラウザを終了した後まで何らかの情報をクライアント側に保存できる、というのは非常に重要です。例えば複雑な情報を保管したければ、その大半をサーバー側に保存し、クライアントには識別のためのIDを保管するなどしておけば、実質的に相当複雑な情報も保存しておくことは可能でしょう。使い方次第で、クッキーはなかなか便利なものなのです。

このクッキーをJSP/サーブレットから利用する場合にはどうすればよいのでしょうか。――JSP/サーブレットでは、クッキーは「Cookie」というクラスのインスタンスとして扱われます。これをリクエストから取り出したり、レスポンスに追加したりすることで、クッキー情報を取り出したり追加したりすることができるのです。またリクエストにあるメソッドをりようすることで、クッキー情報をすべてまとめて取り出したりすることもできます。以下に、基本的な使い方について整理しておきましょう。

●クッキーを作成する
引数にクッキーの名前と保存する値(それぞれString)を指定していCookieインスタンスを作成します。

[変数] = new Cookie( [名前] , [値] );


●クッキーを取り出す
クライアントから送られたクッキーを取り出すには、リクエストからgetCookieを呼び出します。これですべてのクッキー情報をCookieの配列として返します。注意したいのは、「個々のクッキーを個別に取り出すメソッドはない」という点です。つまり、まるごと取り出してから、必要なクッキーがどれか調べないといけません。

[Cookie配列] = request.getCookies();


●クッキーを保存する
クッキーの保存は、レスポンスにあるaddCookieを呼び出します。これでクッキー情報がレスポンスに保管され、クライアントに送信されます。

response.addCookie( [Cookieインスタンス] );


●クッキーの名前と値を調べる
CookieインスタンスのgetName、getValueを呼び出すことで、そのCookieの名前と値を取り出すことができるようになります。(それぞれString値)

[変数] = [Cookieインスタンス].getName();
[変数] = [Cookieインスタンス].getValue();