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