我有这个 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 结帐页面。
但是有一个问题:当用户到达结帐页面时,一切看起来都很好。查看代码片段:
<?php
session_start();
print_r($_SESSION);
?>
上面print_r的输出正是我们之前看到的:并且 Array 填充了其他 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']
变量,但是每次我想获取它的值时反序列化它是非常烦人的。
谁能帮我?