Cookieの受け取り方について説明します。 |
第六章:クッキーのおいしい食べ方
この章では、発行したクッキーを読みとる方法について説明します。(一部、第五章と 内容が重複します)クッキーの取得は少しやっかいです。pathを設定できればそれに越 したことはないのですが、できないサーバーで使用することを前提にして、ここでは説 明をしていきます。クッキーはその該当するパスにあわせた値が環境変数HTTP_COOKIE に格納されます。ただし、pathを指定してクッキーを発行していないためにDomainで指 定されたサーバーのどこでもクッキーが受け取れることになります。逆に言うと、どこ にいても関係ないクッキーまで一緒にHTTP_COOKIEに格納されるということになり、自 分で必要な値を使うためにクッキー名で判別をしなければなりません。ここで、状況に よってのHTTP_COOKIEの値の変化を示してみましょう。
- HTTP_COOKIEが読みとれない場合・・・NULL
- 該当するパスにクッキーが発行されていない場合・・・\0
- 一つのみ発行されている場合・・・Cookie1=Value
- 複数発行されている場合・・・Cookie1=Value; Cookie2=value; Cookie3=value
それぞれの状況に合わせて環境変数に値が代入されます。この状況変化に対応するよう に値を分割していけばいいのですが、注意しなければいけない点は、クッキーとクッキ ーの区切りに';'(セミコロン)と、' '(半角スペース) が含まれている点です。以上の点に注意して値を分割し、必要なクッキーの 値を取得しなければなりません。
3,4をそれぞれ区別せずに汎用的に分割するのであれば、4の場合に帰ってくるクッキー の最後のレコードにセミコロン、半角スペースを加えてから分割をするとわかりやすい かもしれません。HTTP_COOKIEで返ってくる文字列をstrcookieとして、以下にクッキー 分割の順番を示します。
- strcookieの末尾にセミコロンと半角スペースを追加
- 半角スペースをセパレーターとしてstrcookieを分割
- 分割した各文字列の末尾のセミコロンを取り除く
このような感じでしょうか。もちろん、1や2のような場合の対処も分割の前に行わなけ ればいけません。
私自身、クッキーの取得は一番手こずりました。どうしてもうまくいかない場合は遠慮 なく会議室にて質問してください。なお、クッキーの正式な仕様は下記のNetscapeサイ トをご参照ください。
Client Side State - HTTP Cookies (http://www.netscape.com/newsref/std/cookie_spec.html)
□講座案内へ