- 締切済み
クッキー
<?php setcookie(...); sleep(...); $cookiedata = $_COOKIE['...']; このようにして書き込んで間もないクッキーの値を$cookiedataに入れようとしましたがNULLが入っていました。 <?php $buf = ...; setcookie($buf); sleep(...); $cookiedata = $buf; とするのではなく、実際にクッキーから取得したいのですが、よい方法はありませんか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- cybert
- ベストアンサー率56% (18/32)
>でも、もしそのような方法がございましたら教えて下さい。 セッション変数に入れてみてください。
- yambejp
- ベストアンサー率51% (3827/7415)
#2に対する「回答に対するお礼」は再質問 なのでしょうか? 回答にあるとおり、理論的に「できない」という ことでご理解なさっていますか? setするだけで、クライアントからデータが 送られてこないのですから無理だということは わかりますよね?setするのが関数なのに対して getするのが配列なのをみればcookieはあくまでも 前回セットしたものしか受け取れないという 理解にいたると思いますがいかがですか? httpは原則的にクライアントが要求データを送って サーバーがその回答を返しておしまいです。 それを理解しなければ一生悩みつづけると思いますよ。
- galluda
- ベストアンサー率35% (440/1242)
がるです。 なるほど状況を理解いたしました。 > 1つのPHPで書き込んだクッキーを即座に読むのは無理のようでした。 ということがなさりたいのですね。 …申し訳ないのですが「無理」です、が回答になります。 「なぜ」書き込んだCookieの内容を使いたいのか、その背景がみえれば、もうちょっとなにか書き込みできるかと思うのですが。 で。以下、技術的説明を少し。 Cookieは、本質的にはHTTP REQUEST(ブラウザからのリクエスト)情報としてやってきます。 で、PHPの場合、プログラムが動く直前に、内部で切り分けをして、情報を$_COOKIEという変数内に格納します。 一方でsetcookieというのは「HTTP RESPONCE(ブラウザに対するお返事)」において「ヘッダ情報にCOOKIEの設定を入れといて~」っていう、ある意味予約に近いようなニュアンスを持つものです。ですので、そのタイミングでは、例え何十秒待とうとも、HTTP REQUEST情報には入っていきません。一度「ブラウザがRESPONCEを取得」して、その上でもう一度「REQUEST情報として」流してもらう必要があるので。 そのために「無理」となります。 なにかの参考にでもなれば幸いです。
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 …ちと質問の意味を図りかねているのですが。 単純に「まずissetで値があるかを確認してから。値がなければ空文字なりデフォルト値なりなんなり、処理に都合のよい文字を入れておく」ではだめでしょうか?
補足
わかりにくい質問ですみません。 いろいろとやってみた結果、クッキーが書き込みれるのはIEのステータスバーが完結した直後のようで、 <?php setcookie(...); sleep(...); $cookiedata = $_COOKIE['...']; でスリープをどんなに長くしても、ob_?? で出力バッファを操作しても、1つのPHPで書き込んだクッキーを即座に読むのは無理のようでした。 でも、もしそのような方法がございましたら教えて下さい。
お礼
ありがとうございます。 質問に書きました <?php $buf = ...; setcookie($buf); sleep(...); $cookiedata = $buf; でできるのですが、$bufを使わずに <?php setcookie(...); 即座にクッキーを書き込む関数(...); $cookiedata = $_COOKIE['...']; がもしできたならその方がよいと思って質問いたしました。