我有这个PHP脚本启动会话并创建其变量。这是代码片段:
<?php
session_start();
if (!is_array($_SESSION['cart'])) $_SESSION['cart'] = array();
$id = 10;
$_SESSION['cart'][$id] = array( 'cod' => 'ABC', 'price' => '80', 'status' => 'active' );
header('Location: http://www.example.com/checkout.php');
?>
当我使用 print_r 输出$ _SESSION数组时,我得到了这个:
Array (
[cart] => Array (
[136] => Array (
[cod] => ABC
[price] => 80
[status] => active
)
)
)
这非常有效:创建了用户会话,并且很好地设置了所有变量,之后用户被重定向到了que checkout页面。
但是有一个问题:当用户到达que checkout页面时,一切看起来都很好。请参阅代码段:
<?php
session_start();
print_r($_SESSION);
?>
上面 print_r 的输出正是我们之前看到的:和Array填充了其他数组。大!但是这里开始了一个奇怪的部分:当我使用任何会话变量设置为另一个变量的值时,会话数据将丢失。看看:
<?php
session_start();
print_r($_SESSION);
$cart = $_SESSION['cart'];
foreach ($cart as $key => $data) : // if I use foreach($_SESSION['cart'] as $key => $data) will be the same thing
/*** Do stuff here ***/
endforeach;
?>
上面 print_r 的输出是:
Array (
[cart] => Array (
[cod] => ABC
[price] => 80
[status] => active
)
)
事实上,如果我只是输出变量值而不在脚本中使用它们,一切都可以。但是当我在脚本中的某处使用变量时(即使在放置 print_r 片段之后),会话变量也会丢失一些数据。
我试图序列化$_SESSION['cart']
变量,但每次想要获取其值时反序列化都非常烦人。
任何人都可以帮助我吗?
答案 0 :(得分:0)
我认为在foreach中处理Do Stuff Here部分时出现问题,您可以在处理时检查这个:
foreach ($cart as $key => $data)
{
if(is_array($data)){}
}