開発者が語る、無線技術についてや製品開発の秘話、技術者向け情報、新しく興味深い話題、サイレックスが提供するサービスや現状などの話題などを配信していきます。10:00YS今回の話題は「クッキー」です。こぼれ話というか、番外編みたいなものです。ミルクティーでも淹れて気軽に読んでください。「指定されたサーバから指定されたファイルを取ってくるだけ」のプロトコルとして開発されました。設定したいという要求も出てきました。サイトなどの項目がデフォルトで再表示される、といったように。クッキーはそういったデータをクライアント(ブラウザ)側で保持するための仕組みです。して正式に仕様公開されました(※註)。公式に「なかったこと」になりました。動作するという前提です。次のようなものになります。/cookie-test.cgi」のリクエストが送信されます。レスポンスとして返されます。トランザクションと違いありません。action="cookie-test.cgi">::さて、掲示板に発言してみましょう。この時点でもまだクッキーは登場してきません。返答を返すところです。レスポンス部分に付加して返送します。ペアの羅列としてそのページに関連づけて記憶します。ここで重要なポイントは、ブラウザ側はクッキーを「なんだかわからない文字列」として保存するだけで、その中身については原則として理解しないしする必要もない(※註)というところです。続けて連ねるクッキー属性(cookie-av)についてはフォーマットと機能が定義されていますが、ここにも仕様の混乱があります。独自時代の形式「Expires=GMT日時」を使っています。正式には記述されていません(「互換性に対する考慮」としてわずかに言及されているだけ)。ページを開き直すとしましょう。ヘッダとしてリクエストに付加します。この時もブラウザはクッキーを「なんだかわからない文字列」として付加するだけで、その中身については関与しません。側で解釈し処理する必要があります。ヘッダの値を参照することができます。区切り文字になっているが、これは実装固有)。BASE64)を施すのが「お作法」です。してブラウザに返します。文書を作って返すことができます。...え、まどろっこしい?ごもっとも。ペアが二重構造になる」ところでしょう。混ぜ込んで返してもらうという仕組みです。行きも帰りも2度手間ですね。みんなそう思ったのか、最近はクッキーに頼らずフォームデータをローカルにキャッシュできるブラウザが多くなっています。この場合、記憶すべきフォームやデータの選択はブラウザで勝手に行い、次回ロード時に以前の値を嵌めこむのもブラウザで勝手に行います(※註)。「フォームデータの記憶再生」という機能に限っていえば、クッキーはブラウザのフォームキャッシュ機能によって存在意義を失い盲腸化しつつあると言っていいでしょう。※註:フォームデータの記憶がキャッシュによるものかクッキーによるものかは、「ソースコードを表示」してみればわかります。ようなかたちで入っているはずです。クッキーのフォーマットが二重構造になっているのは技術的必然性からではなく、歴史的な理由です。名に直接紐付けようとしていた形跡が伺えます。文法には示されなかったので混乱がありました。渡せるクッキー名は1個だけ」と明示されました。クッキー名の混乱については仕様上の曖昧さだけではなく、実装上の問題もありました。同じクッキー名を使うと衝突して上書きされてしまいました。お作法」として定着したようです。付加するとは限りません。今日のブラウザの多くはクッキーの有効・無効を設定でき、更には「ファーストパーティ・クッキー」「サードパーティ・クッキー」の有効・無効を個別に設定できるものもあります。あるの?と疑問に思うかもしれません。関連づけられれるクッキーです。タグで参照される他サイトからの引用コンテンツに付随するクッキーです。大きな違いはありません。レスポンスに付加しても構いません。クッキーとして返すことでユーザーの追跡(トラッキング)を行います。クッキーは基本的に「サーバから教えて貰った情報をブラウザ側でキャッシュして再送信する」だけの仕組みですから、サードパーティ・クッキーを使っても原則としてログイン名やパスワードなどの個人情報を盗むことはできません。データベースとして記憶すれば、どこの誰かはわからなくとも「以前にアクセスがあった人か、初めての人か」という区別はつきます。ヘッダによる参照元追跡)リクエストが来たかという情報も追加すれば、それなりに有用なトラッキング情報を得ることができます。広告バナーやカウンタのいわゆる「アクセス解析サービス」はこういう仕組みで動いているわけですが、しかし「監視されているようで気持ちが悪い」という人も増えてきたことから、ブラウザ側でサードパーティ・クッキー無効化を選択できるものが増えてきたという事情です。JavaScriptこのようにまどろっこしく中途半端で、フォームデータの記憶再生機構としては盲腸化しつつあり、トラッキングに使われるためセキュリティ懸念の対象にされたりするクッキーですが、じゃあクッキーなんてもう要らない?というと実はそうでもありません。組み合わせることで、サーバに頼らない状態の保存・再生に使えるからです。対して値を書き込むことでクッキー値を追加・更新することもできます。ヘッダは関与しません。使いやすいものではなく、また「ブラウザのキャッシュに記憶するだけ」なので用途は限られます。上でも異なるブラウザ間では参照できません。事故であれ意図的操作であれ、キャッシュを消去すればクッキーも一緒に消えてしまいます。ネットショッピング購入履歴のような情報ならばサーバ上に記録すべきで、まかり間違ってもクッキーなどに頼るべきではありません。「サーバ上でアカウント管理しなくてもデータや状態の保存再生に使える」仕組みとしては、知っていると便利(なことがあるかもしれない)という程度のものです。クッキー」という名前は聞いたことはあっても、それが具体的に何をするものであり、どんな仕組みで動いていているのかは知らない人は多いのではないかと思います。スクリプトを書いたことのある技術者でも、クッキー処理は「グーグルで検索して出てきたコードをコピペ」している場合が多いのではないでしょうか。ソースに合わせてみたら動いた」みたいな妙な世界でした。例によって例のごとく「世間によくある話」ですね。個人情報の取り扱いについて。