我用的CentOS 6.6,PHP 5.3.4一些會話變量下的變回原來的值
我有一個名爲的iframe PHP腳本(我們稱之爲a.php只會).. 當它被稱爲a.php?p_type = 1 & item_num = 1234, 它將數組保存到會話中。 有時,它合併會話中的兩個數組並重新保存到會話 但合併不起作用。 這裏是簡化的代碼。 (我將隱藏爲了簡潔次要的細節)
header('P3P: CP="CAO PSA OUR"');
session_start();
$p_type_val = $_GET["p_type"];
$sess_var = "a".$p_type_val;
$some_array = $_SESSION[$sess_var];
if(isset($_GET["item_num"])
{
$some_array[] = $_GET["item_num"];
$_SESSION[$sess_var] = $some_array;
}
if($p_type_val == 1) // when p_type is 1, merge two arrays in the session.
{
$sess_var2 = "a"."2";
$some_array2 = $_SESSION[$sess_var2];
$_SESSION[$sess_var2] = array_merge($some_array,$some_array2);
}
else if($p_type_val == 2)
{
$some_array2 = $_SESSION["p2"];
print_r($some_array2);
}
.........
首先,我稱爲a.php只會?P_TYPE = 1 & item_num = 1234,那麼我稱爲.php?p_type = 2 lator, ,則新添加的項目編號1234到「a2」將丟失。數組「a2」中的值返回到舊值。 但「a1」中的值是沒有問題的。
我檢查了/ var/lib/php/session目錄中的會話文件,發現所有結果都符合我的預期。 我調用a.php?p_type = 1後,文件中的值與我預期的一樣。 但在a.php之後?p_type = 2,這些值會回到原來的值。
有趣的是,當我打電話給a.php?p_type = 2兩次與不同的item_nums, 數組「a2」工作正常。
我不知道爲什麼會話中的某些值會回到原來的值。 我應該在哪裏開始調試這個..
任何建議,將不勝感激..
在您定義的「$ _SESSION [$ ses_var]」請出示該腳本也一樣,也是在這一行$ some_array [] = $ _GET [「item_num什麼時刻「];爲'$ some_array()'改變'some_array []',因爲'[]'用於調用索引器中的特定位置,另一方面調用'()',自動對它進行排序,這似乎是你正試圖在這裏做(至少在這部分代碼中)。 – user57129
它是簡化的解釋代碼,因爲真正的代碼很長。和上面的代碼,$ _SESSION [$ sess_var]在if子句中定義。這樣,很長一段時間沒有問題了。而數組中的[]意味着最後一個下一個新索引。我認爲這也沒有問題。這是一個沒有問題的舊代碼。但我現在必須在會話中合併兩個數組。這就是問題出現的地方 –