$ _SESSION被json_decode销毁

时间:2012-04-16 13:36:52

标签: php json session

我正在使用php中的会话来存储我正在构建的网站的购物车数据。所有数据都存储为json字符串,并使用两端的json_encode / json_decode进行编码/解码。

看来在一个页面上,json_decode正在删除我的会话数据,这看起来很奇怪。以下是相关的代码,我将其缩小为:

$cart_data = $_SESSION['cart'];
$cart = json_decode($cart_data, 1);

我在测试时一直是var_dumping $ _SESSION ['cart']并且看起来json_decode正在影响它,即使我没有直接告诉它(没有json_decode,转储显示为json的字符串,有了它显示为数组)。这会导致在刷新页面或导航页面时销毁会话。

我有一种感觉,我错过了一些相当简单但却无法发现它的东西

1 个答案:

答案 0 :(得分:1)

看起来您正在使用register_globals = on的服务器上运行此脚本 - 这会导致变量$cart被预先注册为对$_SESSION['cart']的引用(很奇怪,但却是真的)。因此,您将json_decode()的输出直接写入会话对象。

解决这个问题的最佳方法是停用register_globals,或者,如果不可能,请在分配新值之前使用不同的变量名称或取消绑定$cart unset($cart);

在文档中阅读更多内容:http://www.php.net/manual/en/reserved.variables.session.php#85448

相关问题