質問: PHPでキー名にセミコロン、カンマ、スペースを含まなければ、URLをキー名として設定することは可能ですか? 可能である場合は、例も交えてご教示いただけると助かります。
回答: できないこともないかもしれません。 クッキーの「キー」の構文はRFC6265 §4.1.1で引用されるRFC2616 §2.2で定義されています (「token」を参照) が、`:`や`/`などを含むことができないとされています。ですからURLを普通に「キー」として使うことはできません。 しかし、例えば`%`を含むことができないとはされていません。ですからURLのパーセント符号化と同じようにして、`http://www.example.com/abc%def/`を`http%3A%2F%2Fwww.example.com%2Fabc%25def%2F`と「エスケープ」してやれば、元のURLを復元できる形でかつ「キー」に使えるものが作れますね。 ただ、これだとURLの数と同じだけ、違う「キー」のクッキーができるので、ブラウザが保持しなければならないクッキーの数が多くなってしまいます (ブラウザは、クッキーの数が適当な限度を超えたらクッキーを消去します。限度はブラウザによって違います)。 というわけで、ご質問のようなことは、できなくはないけれどもあまり良い考えではないです。 ちなみに、個々のクッキーには「キー」と値の他に、DomainやPathといった属性を持たせることができます。これによって、ブラウザがアクセスするURLのドメインやパスがこれらの属性に一致したときだけサーバに送信されるクッキー、というものを作ることができます。例えば`Domain=www.example.com`、`Path=/abc%def/`という属性を持つクッキーは、`http://www.example.com/abc%def/...`といった形のURL配下にアクセスしたときだけサーバに送信されます。 通常は、これらの属性を使ってクッキーが有効になるURLの範囲をコントロールします。 ※文中のリンクのRFC日本語訳は非公式な訳です。