2

我正在使用 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 字符串,它显示为数组)。当页面被刷新或导航离开时,这会导致会话被破坏。

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

4

1 回答 1

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

于 2012-04-16T14:21:08.607 回答