PHPでのCOOKIEの挙動がちょっと面白かった
注)すっごいどうでもいい記事です。
プログラム組んでたらなんか見つけたので一応書いてみます。
<?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は最後にクッキーをセットしているということですね。
ほんとどうでもいい気付きでした。
最後にセットしているわけではなく、$_COOKIEがHTTPリクエスト時のクッキー内容を参照しているとのコメントを頂きました!Nackyさん、ありがとうございます!^^
↑冷静に考えたらそりゃそうですよね。
ブラウザがリクエスト→サーバがレスポンスという大原則が頭から抜けてましたw
ホント初歩的ですいませんw
この記事は自分の恥さらしということで残します…w
“PHPでのCOOKIEの挙動がちょっと面白かった” に対して2件のコメントがあります。
コメントは受け付けていません。
(twitter @akikazu_経由でお邪魔します)
$_COOKIEはHTTPリクエスト時にブラウザがサーバに送ってきた内容を元にしてますので,setcookieしたものは即時反映されなくて正常です.
>Nackyさん
コメントありがとうございます!^^
そうなんですか!クッキーをセットするのが最後なのではなく、$_COOKIEが参照してる位置が違ったのですねー…勉強になりました!
ありがとうございます!!!