Javaプログラミング/サーバサイド&ケータイJava

クッキーをマスターしよう(4ページ目)

ブラウザに保存できる情報「クッキー」をJSP/サーブレットから利用してみましょう。

執筆者:掌田 津耶乃

クッキーに関するちょっとした疑問


フォームを送信するとクッキーが追加される。ただし、実際にやってみるとJSESSIONIDというクッキーが表示されたり、1回前に送信したクッキーまでしか表示されないなど不思議なことが多い。


さて、JSPとサーブレットが完成したところで、実際に動作を確かめてみてください。すると、いくつか不思議な点に気がつきます。それらについて簡単に説明しておきましょう。

●「JSESSIONID」ってなに?
クッキーの一覧を表示させると、その最初に「JSESSIONID」という見たことのないクッキーが表示されるはずです(最初に表示されなくとも、リロードしたりフォーム送信後には表示されるはずです)。こんなクッキー、作った記憶はないのに……。

実は、これは「Javaサーバー(サーブレット・コンテナ)」が利用しているクッキーなのです。何のためのものか?というと、これは「セッションの識別用ID」として使われているクッキーなのです。

サーブレット・コンテナでは、セッションを利用してクライアントと接続を保ち続けることができます。が、本来、Webにはそんな機能は用意されていません。どうやってサーバーが「今接続しているのは、さっきアクセスしてきたクライアントと同じ人だな」ということを識別しているのか? それは、このクッキーに保存している値によってなのです。

このクッキーは、setMaxAgeが設定されていません。つまり、接続が切れると失われるものなのです。こうすることで、「接続中だけこのクライアントが誰なのかという情報を保持する」ということを行なっているのですね。ですから、このクッキーを勝手に操作したりするとセッションに影響が出ますので絶対に行なわないようにしましょう。

●送信したクッキーは直後には表示されない?
フォームから新しいクッキーを送信してみてください。なぜか、画面には表示されないはずです。「おかしいな?」と思ってまた送信してみると、前回送信したクッキーが表示されるようになります(新たに送信したものはやっぱり表示されません)。何回やっても同じです。送信した直後には、クッキーは表示されないのです。

これは、「クッキーの情報がどうやってやりとりされているか」ということがわからないと理解するのが難しいでしょう。――クッキーは、常に「クライアントからサーバーに送信される」「サーバーからクライアントに送り返される」ということを繰り返して機能しています。重要なのは「JSPでもサーブレットでも、直接ブラウザにクッキーを保管することはできない」という点です。ですから、送信したフォームの情報がクッキーに保管されるまでには、

クライアントからフォームが送信される
(※ここで現在のクッキー情報がサーバーに送られる)

  ↓
サーバーからクライアントにクッキー情報が送られる

  ↓
クライアントにクッキー情報が保管される
(※ここで初めてクライアントにクッキーが追加される)

  ↓
再びクライアントからサーバーに何か送信される

  ↓
サーバーで、新たに追加したクッキーが初めて受け取られる

  ↓
クライアントに新たに追加したクッキー情報が送られる


――こんな形で処理がされていくことになります。なんだかよくわからないかも知れませんが、要するに「クッキー情報を送ったときには、まだクライアントにはそのクッキーは保管されていない。追加後にサーバーに送信されたときにようやく追加したクッキー情報がサーバーで認識される」ということなのです。つまり、「1回ずれる」のですね。


  • 前のページへ
  • 1
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます