将所有 POST 数据存储在 SESSION 中

Posted

技术标签:

【中文标题】将所有 POST 数据存储在 SESSION 中【英文标题】:Storing all POST data in SESSION 【发布时间】:2013-01-06 02:11:14 【问题描述】:

我有更多来自 $_POST 这样的值(超过 20 个)...

$name = $_POST['name'];
$username = $_POST['username'];
$city = $_POST['city'];
$mobile = $_POST['mobile'];
$address = $_POST['address'];

注意:我已经阻止了 SQL 注入的值。

我的问题是我能知道有没有办法一次将所有这些 POST 值存储在 SESSION 中? 而不是这种方法..

$_SESSION['name'] = $name;

任何答案将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:
$_SESSION['post-data'] = $_POST;

这将在单个会话变量中创建一个帖子值数组。这些值可以访问为

$_SESSION['post-data']['name']
$_SESSION['post-data']['username']
...

【讨论】:

你能用我上面的 POST 变量解释一下吗 那我不用分别加$_POST['name']等吗? OK.. 但有一件事,我已将 POST 值分配给变量.. $name = $_POST['name'];等等。然后会发生什么? 如果页面上有多个$_POST 会怎样?如何设置特定的$_POST【参考方案2】:

您可以将一个数组添加到另一个数组。$_POST$_SESSION 只是数组。 请注意,第二个数组中的键在重复的情况下优先。

$_SESSION += $_POST;

但是,我不认为这个结局很好,因为客户端可以向会话注入任何他想要的东西,例如。劫持您的用户会话 ID。

【讨论】:

请举例说明...谢谢 $_SESSION += $_POST;这就是例子。 简洁优雅。 +1 我不知道这是否改变了,但第一个数组中的值优先于重复键。见php.net/manual/en/function.array-merge.php【参考方案3】:

如果您要查找使用与发布的数组相同的键设置的会话变量,您可以使用:

foreach ($_POST as $key => $value) 
    $$key = $value;
    $_SESSION[$key] = $value;

这将使您的 $_POST 数组成为基于数组键的变量,并同时设置会话。然后,您可以使用$_SESSION['name']$name 访问您的name 帖子。

这意味着您不再需要使用:$name = $_POST['name'];。因为上面的代码会为你设置 name 变量并设置 session 变量。

【讨论】:

你能给我看一个例子吗:如果你寻找使用与发布数组相同的键设置的会话变量 这会将您的帖子数组一次性转换为变量和会话变量。这意味着如果您发布name=Bob,它会将其转换为$name = 'Bob';$_SESSION['name'] = 'Bob'; 为什么要担心表单的字段名称匹配并有效地覆盖会话变量而您却没有意识到呢?将整个 post 数组推入单个会话 var 只会使 $_POST 产生多维,而不会丢失数据。 什么是“$$key = $value;”做什么?【参考方案4】:

在 php 中使用表单帖子或标头位置重定向传递变量的最佳解释查看我在此线程中的答案:How to pass variables received in GET string through a php header redirect?

【讨论】:

以上是关于将所有 POST 数据存储在 SESSION 中的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的架构与历史

PHP学习笔记:使用session来存储用户的登录信息

中数通 数据岗 大数据面经

PHP存储会话数据,在会话中存储用户ID

如何将 POST 元素存储在数组中

原码,反码与补码的概念以及Java中数的存储方式