• 締切済み

クッキー

<?php setcookie(...); sleep(...); $cookiedata = $_COOKIE['...']; このようにして書き込んで間もないクッキーの値を$cookiedataに入れようとしましたがNULLが入っていました。 <?php $buf = ...; setcookie($buf); sleep(...); $cookiedata = $buf; とするのではなく、実際にクッキーから取得したいのですが、よい方法はありませんか?

みんなの回答

  • cybert
  • ベストアンサー率56% (18/32)
回答No.4

>でも、もしそのような方法がございましたら教えて下さい。 セッション変数に入れてみてください。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#2に対する「回答に対するお礼」は再質問 なのでしょうか? 回答にあるとおり、理論的に「できない」という ことでご理解なさっていますか? setするだけで、クライアントからデータが 送られてこないのですから無理だということは わかりますよね?setするのが関数なのに対して getするのが配列なのをみればcookieはあくまでも 前回セットしたものしか受け取れないという 理解にいたると思いますがいかがですか? httpは原則的にクライアントが要求データを送って サーバーがその回答を返しておしまいです。 それを理解しなければ一生悩みつづけると思いますよ。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がるです。 なるほど状況を理解いたしました。 > 1つのPHPで書き込んだクッキーを即座に読むのは無理のようでした。 ということがなさりたいのですね。 …申し訳ないのですが「無理」です、が回答になります。 「なぜ」書き込んだCookieの内容を使いたいのか、その背景がみえれば、もうちょっとなにか書き込みできるかと思うのですが。 で。以下、技術的説明を少し。 Cookieは、本質的にはHTTP REQUEST(ブラウザからのリクエスト)情報としてやってきます。 で、PHPの場合、プログラムが動く直前に、内部で切り分けをして、情報を$_COOKIEという変数内に格納します。 一方でsetcookieというのは「HTTP RESPONCE(ブラウザに対するお返事)」において「ヘッダ情報にCOOKIEの設定を入れといて~」っていう、ある意味予約に近いようなニュアンスを持つものです。ですので、そのタイミングでは、例え何十秒待とうとも、HTTP REQUEST情報には入っていきません。一度「ブラウザがRESPONCEを取得」して、その上でもう一度「REQUEST情報として」流してもらう必要があるので。 そのために「無理」となります。 なにかの参考にでもなれば幸いです。

eresisy
質問者

お礼

ありがとうございます。 質問に書きました <?php $buf = ...; setcookie($buf); sleep(...); $cookiedata = $buf; でできるのですが、$bufを使わずに <?php setcookie(...); 即座にクッキーを書き込む関数(...); $cookiedata = $_COOKIE['...']; がもしできたならその方がよいと思って質問いたしました。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 …ちと質問の意味を図りかねているのですが。 単純に「まずissetで値があるかを確認してから。値がなければ空文字なりデフォルト値なりなんなり、処理に都合のよい文字を入れておく」ではだめでしょうか?

eresisy
質問者

補足

わかりにくい質問ですみません。 いろいろとやってみた結果、クッキーが書き込みれるのはIEのステータスバーが完結した直後のようで、 <?php setcookie(...); sleep(...); $cookiedata = $_COOKIE['...']; でスリープをどんなに長くしても、ob_?? で出力バッファを操作しても、1つのPHPで書き込んだクッキーを即座に読むのは無理のようでした。 でも、もしそのような方法がございましたら教えて下さい。

関連するQ&A

専門家に質問してみよう