【问题标题】:PHP merge $_POST into $_SESSIONPHP 将 $_POST 合并到 $_SESSION
【发布时间】:2012-01-24 02:35:40
【问题描述】:

有没有办法获取 $_POST 数据数组并将其合并到 $_SESSION 数组中。我希望它保持当前数据完整,只插入新数据或更新已更改的部分。我已经尝试过 array_merge,但它没有达到我想要的效果。

谢谢

【问题讨论】:

  • 您对array_merge 做了什么尝试?它完全符合您的要求。
  • 如果array_merge() 没有做你想做的事,你可能需要想出一个例子。你的输入是什么,你期望什么输出?保持简单。
  • 我希望您了解在没有事先过滤 $_POST 数据的情况下将 $_POST 变量保存在 $_SESSION 中所涉及的安全风险。

标签: php arrays session post


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试将$_POST 合并到$_SESSION 不是一个好主意。相反,请执行以下操作:

    $_SESSION['lastPost']=$_POST;
    

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

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

    【讨论】:

      【解决方案3】:
      foreach ($_POST as $key => $val) {
          if (!isset($_SESSION[$key]) || ($val !== $_SESSION[$key])) {
              $_SESSION[$key] = $val;
          }
      }
      

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        (如上的安全警告:)

        【讨论】:

          猜你喜欢
          • 2016-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-20
          • 1970-01-01
          • 1970-01-01
          • 2018-10-12
          • 1970-01-01
          相关资源
          最近更新 更多