QUOIT Blog

PHPでのCOOKIEの挙動がちょっと面白かった

この記事は7年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

注)すっごいどうでもいい記事です。

プログラム組んでたらなんか見つけたので一応書いてみます。

<?php

session_start();

$_SESSION[“name_s”]=”hogehoge”;
setcookie(“name_c”, “hogehoge”, time()+3600);

var_dump($_SESSION);
var_dump($_COOKIE);

?>

このコードの出力結果ってどうなると思います?

まぁひっぱる内容でもないからいいんですけど。

結果はこちら。

array(1) {
[“name_s”]=>
string(8) “hogehoge”
}
array(1) {
[“__utma”]=>
string(65) “<略>”
}

あれ?クッキーがセットされてなくね…?

でも不思議なことに、ブラウザのクッキーを確認してみると、きちんと値が入っている。

関数の実行順序とかの問題?

ちなみに、ページを更新すると

array(1) {
[“name_s”]=>
string(8) “piyopiyo”
}
array(3) {
[“__utma”]=>
string(65) “<略>”
[“PHPSESSID”]=>
string(32) “<略>”
[“name_c”]=>
string(8) “piyopiyo”
}

と、こうなる。

更新した時点で初めてPHPSESSIDもセットされていることが確認できるので、やっぱり実行順序の問題なんでしょう。

PHPは最後にクッキーをセットしているということですね。

ほんとどうでもいい気付きでした。

10/02/24 21:00修正
最後にセットしているわけではなく、$_COOKIEがHTTPリクエスト時のクッキー内容を参照しているとのコメントを頂きました!Nackyさん、ありがとうございます!^^

↑冷静に考えたらそりゃそうですよね。
ブラウザがリクエスト→サーバがレスポンスという大原則が頭から抜けてましたw
ホント初歩的ですいませんw

この記事は自分の恥さらしということで残します…w

2 comments for “PHPでのCOOKIEの挙動がちょっと面白かった

  1. 2010年2月24日 at 8:57 PM

    (twitter @akikazu_経由でお邪魔します)
    $_COOKIEはHTTPリクエスト時にブラウザがサーバに送ってきた内容を元にしてますので,setcookieしたものは即時反映されなくて正常です.

  2. yakumo
    2010年2月24日 at 9:06 PM

    >Nackyさん
    コメントありがとうございます!^^
    そうなんですか!クッキーをセットするのが最後なのではなく、$_COOKIEが参照してる位置が違ったのですねー…勉強になりました!
    ありがとうございます!!!