次の明らかに役に立たないコードを見てください。
<?php
session_start();
$_SESSION["key-".rand(1,1000)] = time();
print_r($_SESSION);
die();
これをローカル マシンから実行すると、次のように出力されます。
Array
(
[key-272] => 1341011374
)
コードをそのままにしてブラウザを更新すると、次のようなものが表示されます。
Array
(
[key-272] => 1341011374
[key-954] => 1341011374
[key-895] => 1341011379
)
もう一度更新します。
Array
(
[key-272] => 1341011374
[key-954] => 1341011374
[key-895] => 1341011379
[key-337] => 1341011379
[key-15] => 1341011869
)
など、 $_SESSION 配列に2 つのレコードを追加するたびに(1 つだけではありません)。また、追加されたレコードの各ペアで、最初の値は前に追加されたレコードと同じですが、キーは異なる方法で生成された乱数であることに注意してください。
ここで何が起こっているのか誰か説明できますか?
更新 1
コメントで他の人に言及したように、最初のリクエストは$_SESSION 値を1 つだけ設定し、その後は毎回 2 を設定することに注意してください。
2 番目のリクエスト以降、リクエストごとに 2 つの値を設定すると、タイムスタンプが異なります。リクエストが 2 回発生した場合、それらは同じか近いと予想されますが、その間に長時間待機した場合でも、各ペアの最初のタイムスタンプは常に前のリクエストのタイムスタンプと同じです。奇妙な。
更新 2
今、Firefox と Safari をチェックインしたところ、最初は少し奇妙な結果が得られましたが、リクエストごとに 1 つのレコードしか追加されず、すべてが期待どおりに機能しているように見えました。すべてのコードを削除し、ここに表示されているコードだけを残して、他のコードを含まないプレーンな index.php ファイルにしました。それでも、Chrome では、上で説明したのとまったく同じように動作します。
Chrome 中心の問題、または少なくとも Chrome 関連の問題のようですが、その理由についてはまだわかりません。スクリプトのすべてがべき等でない限り、それらを 2 回実行することはかなりひどいバグのように思えます...