- ベストアンサー
PHPにおけるCookieの挙動について
- PHPでCookieを使ったプログラムを作っていたところ、Cookieの値を保存できるが取り出せない問題に遭遇しました。
- 具体的なプログラムのコードを示しながら、問題の内容と解決方法を説明しています。
- 詳しい方に助言を求めています。環境はWindows Vista Home Premium+xampp for Windowsです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
調べてみたところクッキー名にはピリオドやスペースを使わないほうがよいみたいです。 Outでセットされた後に$_COOKIEの中身を出力してみたところ "TestCookieVariable_COOKIE_NAME"という名前でセットされてました。 仕様的なものは残念ながら見つけられませんでした。 どなたかがフォローしていただけるとありがたいです。
その他の回答 (2)
- hogehoge78
- ベストアンサー率80% (433/539)
すこし捕捉します。 $_GET/$_POST/$_COOKIEなどは、もともとHTTPヘッダなどに含まれる文字列をPHP側でパースして、スーパーグローバル変数である左記に代入しています。 従いまして、HTTPヘッダを見れば、元々のデータを閲覧することが出来ます。 ■POSTの値に関して <?php echo file_get_contents('php://input');?> 例) test=value&sbmt.x=10&sbmt.y=12&hoge[]=value1&hoge[]=value2 これは、 ・inputタグのname値が、「test」のもの ・submitボタンがイメージで、name値が「sbmt」の場合、上記のように入ってくる ・inputのtypeをcheckboxとして、name値を「hoge[]」としてかつ、複数チェックされた場合 などといった場合にそのように含まれてきます。 ■GETに関して <?php echo $_SERVER['QUERY_STRING'];?> 詳細は省略しますが、$_GETにパースして配列に直される前の、URLに含まれている「?」以降の文字列すべてが参照出来ます。 ■COOKIEに関して <?php echo $_SERVER['HTTP_COOKIE'];?> 例) test=hoge; TestCookieVariable.COOKIE_NAME=moge HTTPヘッダの「Cookie」という項目に含まれてくる文字列です。 「変数名=値」の組み合わせで、複数存在する場合は、セミコロンで区切られて列挙されます。 これは、IEやFirefoxにあるHTTPヘッダ閲覧ソフトウェアなどで見るといいかもしれません。 とりあえず、今後何かで参照する機会があるかもしれませんので、上記のように参照出来ることを頭の片隅にでもおいておいてください。
お礼
回答ありがとうございます。 確かに、HTTPヘッダを見れば送られてきた値の中身は一目瞭然でしたね…。 知ってはいたのですが、完全に失念しておりました。 基本的なことですが、今後十分に留意したいと思います。思い出させて下さったことに感謝します。
- duron
- ベストアンサー率77% (73/94)
過去の質問で近いものがありました。 http://okwave.jp/qa/q3962054.html $_COOKIEに関しても同じ様に変換されるのかと思います。
お礼
回答ありがとうございます。 なるほど、スーパーグローバル変数で「.」などは使わない方が安全のようですね。 このページは見落としていました、勉強になりました。
お礼
ピリオドをアンダースコアに変えたところ、期待通り動作してくれました。 本当に助かりました。迅速に回答下さって、大変助かりました。 ピリオドはうまく認識しないんですね…。クッキーのキーには使えない、禁止文字などあるのでしょうか。 もし仕様的な情報をお持ちの方いらっしゃいましたら、フォロー頂けると幸いです。 取り急ぎお礼まで。本当にありがとうございました!
補足
技術的な内容はNo.2様やNo.3様が教えて下さいましたが、考えた結果、やはり困っている時に迅速な回答を下さったNo.1様の回答をベストアンサーとさせて頂きます。 皆様、ありがとうございました。