PHP $_SESSION['key'] 被输入按钮值覆盖。为啥?
Posted
技术标签:
【中文标题】PHP $_SESSION[\'key\'] 被输入按钮值覆盖。为啥?【英文标题】:PHP $_SESSION['key'] over-written with input button value. Why?PHP $_SESSION['key'] 被输入按钮值覆盖。为什么? 【发布时间】:2011-05-05 22:00:13 【问题描述】:在 php 购物车中遇到以下问题。
我的会话转储如下所示:
Array ( [username] => test@test.com [key] => 1 )
购物车有三个按钮:
<form name='cartForm' action='cart.php' method='post'>
<input type='image' value='submit' name='continueshopping' src='x.jpg' />
<input type='image' value='submit' name='update' src='y.jpg' />
<input type='image' value='submit' name='checkout' src='z.jpg' />
每当我按下其中一个按钮时,页面都会重新加载并执行所需的操作(即删除或添加项目)...但会话数组会更改为以下内容(取决于按下的按钮)
Array ( [username] => test@test.com [key] => continueshopping_y )
Array ( [username] => test@test.com [key] => update_y )
Array ( [username] => test@test.com [key] => checkout_y )
[key] 是保留字吗?为什么 $_SESSION['key'] 的值会被只发布所有内容的表单覆盖?这对我们的项目来说是个问题,因为我们将用户帐户 ID 存储在 [key] 中,但每次在购物车中按下按钮时,该值都会被覆盖。
实际的代码很长,在这里发布它是不切实际的。不知道要发布什么,因为购物车除了获取 session_id() 之外从不与会话交互。真的,我只是想知道是否有人经历过类似的事情。我无法在本地服务器 (PHP5) 上重新创建问题,仅存在于实时服务器 (PHP4) 上。
提前致谢。
【问题讨论】:
【参考方案1】:不,key 不是保留的;必须有覆盖条目的实际代码。
由于它取决于服务器配置,我建议您检查 register_globals 设置并确保它在两台服务器上均已关闭。
【讨论】:
【参考方案2】:continueshopping_y、update_y、checkout_y - 当使用图像输入时,浏览器还将发送单击图像的 x 和 y 坐标。我的猜测是有一些代码如下:
foreach ($_POST as $key => $value)
.....
....
Many lines of code later ....
....
$_SESSION['key'] = $key;
// or,
session_register('key');
【讨论】:
将 foreach ($_POST as $key => $value) 更改为 foreach ($_POST as $key2 => $value) 使一切正常。所以我假设答案是 AndreKR 的答案和你的答案的组合——_POST 键变量与 _SESSION 键变量混淆了。以上是关于PHP $_SESSION['key'] 被输入按钮值覆盖。为啥?的主要内容,如果未能解决你的问题,请参考以下文章