今天我在測試某些事情時遇到了一些奇怪的會話行爲。首先,我負責爲WordPress網站創建註冊功能。過去我在WordPress中做了大量的工作,但是我從來沒有做過任何涉及任何服務器端腳本語言的工作。會話變量在PHP中消失
我測試了我的工作環境,其中涉及確保我能夠連接到MySQL,確保會話正常工作,基本上只是讓自己熟悉設置。
當測試會議,我做了以下內容:
<?php
$timer = time();
$_SESSION[$timer] = $timer;
print_r($_SESSION);
?>
我期待在頁面的第一負載看到這樣的事情:
Array
(
[1396745563] => 1396745563
)
...這正是發生了。在第二次刷新,我想看看:
Array
(
[1396745563] => 1396745563
[1396745570] => 1396745570
)
...但是,相反,我看到:
Array
(
[1396745570] => 1396745570
)
哇!時間戳1396745563的原始會話變量已不存在,並且在其中有一個新的變量。
我的直接反應是可能缺少session_start()
,但事實並非如此。只是爲了進一步說服自己的東西很奇怪這個,我改變了我的代碼看起來像這樣:
<?php
$timer = time();
$_SESSION['time_' . $timer] = $timer;
print_r($_SESSION);
?>
我想也許具有對索引的時間戳的會話變量有某種特殊的行爲(其中可能是我知道的這個問題的答案)。
這一次,行爲完全如我所料。頁面的每次刷新都添加到陣列打印輸出中。頁面的刷新數後,它看起來是這樣的:
Array
(
[time_1396745663] => 1396745663
[time_1396745667] => 1396745667
[time_1396745671] => 1396745671
[time_1396745675] => 1396745675
[1396745570] => 1396745570
)
那古怪的變量是從我原來的嘗試結轉(我只是精確)會話數據。
有人可以解釋這種非常奇怪的行爲?我想不出有什麼明顯的事情可以做到這一點。
注:我懷疑這與WordPress有什麼關係;我只是把它包括在這個背後給出了一個動機。
如果你已經加入'在session_start();'在上面,你會看到這個通知.. **'未知:跳過數字鍵**。在使用會話之前添加'session_start();'總是一個好習慣。 –