PHP将$ _POST合并到$ _SESSION中

时间:2011-12-20 02:50:35

标签: php arrays session post

有没有办法获取$ _POST数据数组并将其合并到$ _SESSION数组中。我希望它保持当前数据的完整性,只插入新数据或更新已更改的部分。我已经尝试过array_merge,但它并没有按照我的意愿去做。

由于

4 个答案:

答案 0 :(得分:1)

您是否可以尝试创建$ _SESSION ['postVars']变量,然后在其中存储$ _POST信息。我不会尝试将$ _SESSION与$ _POST合并,这将在以后的轨道上对您的应用程序产生安全隐患。话虽如此,我还要小心保存$ _POST全局上的任何内容。无论如何,我希望我的建议有所帮助。

答案 1 :(得分:1)

尝试将$_POST合并到$_SESSION不是一个好主意。相反,做一些像:

$_SESSION['lastPost']=$_POST;

或者,如果您想要更新更改,请将$_POST$_SESSION['lastPost']进行比较,并为受影响的密钥分配任何差异,例如

$_SESSION['lastPost']['thisKeysValueChanged'] = $_POST['thisKeysValueChanged'];

答案 2 :(得分:1)

foreach ($_POST as $key => $val) {
    if (!isset($_SESSION[$key]) || ($val !== $_SESSION[$key])) {
        $_SESSION[$key] = $val;
    }
}

简而言之,如果当前正在考虑的POST键值在SESSION arra中没有相应的条目,或者这两个值不同,则将POST数据复制到SESSION。

但是,请注意,这将允许恶意用户覆盖整个会话数组。如果他们知道你保留了$_SESSION['is_admin']标志,他们就可以用适当的值轻易覆盖它并给自己超级用户权限。

直接+盲目地将用户提供的数据传输到会话变量中绝对不是一个好主意。

答案 3 :(得分:0)

array_merge确实有效,但它不会修改数组,返回合并后的数组。你想要做的是:

$_SESSION = array_merge($_SESSION, $_POST);

(安全警告如上:)