я использую CentOS 6.6, PHP 5.3.4часть сессии varibles возвращается к старому значению
У меня есть PHP скрипт в IFRAME (назовем его 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 []' for '$ some_array()', потому что '[]' для вызова определенной позиции в индексе, '()' с другой стороны, сортирует его автоматически, что, кажется, является тем, что вы пытаетесь сделать это (в той части кода, по крайней мере). – user57129
это упрощенный код для объяснения, потому что настоящий код очень длинный. и код выше, $ _SESSION [$ sess_var] определяется в условии if. таким образом, долгое время не было проблем. и [] в массиве означает новый индекс, следующий за последним. Я думал, что это тоже не проблема. это старый код без проблем. но теперь я должен объединить два массива в сеансе. вот где проблема возникает –