Php 循环$POST,使$SESSION等效

Php 循环$POST,使$SESSION等效,php,post,foreach,session-variables,Php,Post,Foreach,Session Variables,这是循环通过API发送的$POST数据并从中创建等效的$SESSION name/value对的正确方法吗 foreach($_POST as $key=>$value) { $_SESSION['$key']=$value; } 更新:首先,感谢大家的热烈响应-我想我需要解释一下我正在努力克服的问题以及为什么会考虑使用此功能。$_POST响应来自支付处理器网关-问题在于,由于支付表单/处理不在我们的域中,因此支付结果(批准/拒绝等)通过$POST中继到我们的服务器-当我们的PHP代码尝

这是循环通过API发送的$POST数据并从中创建等效的$SESSION name/value对的正确方法吗

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

更新:首先,感谢大家的热烈响应-我想我需要解释一下我正在努力克服的问题以及为什么会考虑使用此功能。$_POST响应来自支付处理器网关-问题在于,由于支付表单/处理不在我们的域中,因此支付结果(批准/拒绝等)通过$POST中继到我们的服务器-当我们的PHP代码尝试处理响应数据时,它会查找各种PHP结构(如php包含'file.php')在该域下,而不是我们的域下,并将错误清除-我需要将$POST数据移动到会话中,然后将此人移回我们的域,以便文件/目录/资源树正确无误。这对我遇到的情况有意义吗?

不要使用单引号:

foreach ($_POST as $key => $value) {
  $_SESSION[$key] = $value;
}
我鼓励你读一下

<强>注:由于多个原因,这可能是不安全的,主要是由键冲突注入。考虑如果我张贴登录用户ID。< /P> 这可以通过封装来缓解:

$_SESSION['posted_data'] = $_POST;

不要使用单引号:

foreach ($_POST as $key => $value) {
  $_SESSION[$key] = $value;
}
我鼓励你读一下

<强>注:由于多个原因,这可能是不安全的,主要是由键冲突注入。考虑如果我张贴登录用户ID。< /P> 这可以通过封装来缓解:

$_SESSION['posted_data'] = $_POST;

你不想让他们分开吗

$_SESSION['response'] = $_POST;

你不想让他们分开吗

$_SESSION['response'] = $_POST;

忽略这可能导致的安全问题取决于您如何使用它,您可以做的是使用:

$_SESSION = array_merge($_POST, $_SESSION);
这将只引入在$\u会话中尚未找到密钥的后变量。如果希望后变量优先,请切换它们

简单介绍一下安全性,如果像许多人一样,您使用会话存储用户id,那么如果我使用
userid=1
向您的脚本发送POST请求,会发生什么情况


我想说的是,小心你在做什么。如果可能的话,你最好按照建议做,并在$会话中为post vars使用一个唯一的键,比如
$会话['post\u vars']=$post
(或者如果你使用它来持久化表单数据,可能是
['form\u data']
,这通常是人们这样做的原因).

忽略这可能导致的安全问题取决于您如何使用它,您可以做的是使用:

$_SESSION = array_merge($_POST, $_SESSION);
这将只引入在$\u会话中尚未找到密钥的后变量。如果希望后变量优先,请切换它们

简单介绍一下安全性,如果像许多人一样,您使用会话存储用户id,那么如果我使用
userid=1
向您的脚本发送POST请求,会发生什么情况


我想说的是,小心你在做什么。如果可能的话,你最好按照建议做,并在$会话中为post vars使用一个唯一的键,比如
$会话['post\u vars']=$post
(或者如果你使用它来持久化表单数据,可能是
['form\u data']
,这通常是人们这样做的原因)

$_SESSION=array_merge($_SESSION,$_POST);
这可能会起作用,但却是一件“坏事”-覆盖
$\u会话中已有项目的范围很大
变量:

index.php:

<form action="2.php" method="post">
<input type="text" name="hidden" value="hidden">
<button type="submit">Click</button>
</form>

显然,在执行此操作之前,请执行您需要执行的任何数据检查,尽管如果您确实想按您所说的那样执行,您可以使用

$_SESSION=array_merge($_SESSION,$_POST);
这可能会起作用,但却是一件“坏事”-覆盖
$\u会话中已有项目的范围很大
变量:

index.php:

<form action="2.php" method="post">
<input type="text" name="hidden" value="hidden">
<button type="submit">Click</button>
</form>
显然,在执行此操作之前,您需要执行任何数据检查,尽管您也可以使用:

这将获取
$\u POST
的值,并添加
$\u SESSION
的值,这些值的键在
$\u POST

中不存在。您还可以使用:


这将获取
$\u POST
的值,并添加
$\u SESSION
的值,这些值的键在
$\u POST

中不存在,因为POST是由支付网关进行的,会话将与其关联(最有可能在第一次请求时丢失,因为可以假定它永远不会费心读取会话cookie)

您的客户将永远无法在其会话中看到此数据

如果你想让这些数据可用,你需要以某种方式保持它,如果支付网关给你可利用的客户信息。可能的解决方案是数据库、密钥/值存储


或者,支付网关通常允许您指定一个链接,以便在购买后将客户端浏览器重定向到该链接。从帖子中获取参数,您可以将其附加到重定向URL,以将其作为获取参数传递回您的网站。

由于帖子是由支付网关制作的,因此会话将被取消与之关联(并且最有可能在第一次请求时丢失,因为可以假定它永远不会费心读取会话cookie)

您的客户将永远无法在其会话中看到此数据

如果你想让这些数据可用,你需要以某种方式保持它,如果支付网关给你可利用的客户信息。可能的解决方案是数据库、密钥/值存储


或者,支付网关通常允许您指定一个链接,以便在购买后将客户端浏览器重定向到该链接。从帖子中获取参数,您可以将其附加到重定向URL,以将其作为获取参数传递回您的网站。

您需要删除
$key
周围的单引号@MarcB感谢Marc,但这不是我们需要的,我们已经存储了会话变量,我们需要保留在适当的位置。请参阅下面我对Jasons answerYou的评论