尝试在PHP页面之间发送数据;帖子/cURL 不起作用,会话变得混乱


Trying to send data between PHP pages; Post/cURL not working and Sessions getting messy

我最近问了这个问题使用 curl 发布数据 - 实际上刷新到下一页,但我很快意识到解决方案并不是很好......

所以我在几个地方的 PHP 页面之间传递数据。这是我目前的问题:

我依赖 cookie,所以我在每个页面的顶部检查 cookie 是否已启用:

session_start();
if (!isset($_COOKIE['PHPSESSID'])) {
    if ($_GET['rd'] == '1') {
        header('Location: *redirect url*');
    } else {
        *refresh the page, setting 'rd' to '1'*
    }
}

但是,由于这是每个页面上的"标题",因此它必须是通用的。例如,发送到它的任何帖子或获取数据(从另一个页面或表单)都应发送到重定向的页面。

Get 很容易,因为我可以将其包含在 url 中,但我在 Post 上遇到了问题。

我从cURL开始将帖子数据发送到下一页,但我意识到它实际上并没有进入页面

$ch = curl_init($some_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'myvar=something');
curl_exec($ch);
curl_close($ch);$ch = curl_init($some_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'myvar=something');
curl_exec($ch);
curl_close($ch);

cURL 之后不会加载$url;它会返回它

因此,我被建议使用Sessions,我很快意识到这不是一个很好的解决方案;

  1. 重定向时,如果我将 Post 数据设置为会话变量(存储数据),则每个使用 Post 数据的页面都需要检查数据是在 Post 还是在 Session 中。
  2. 效率不高 - 我在两个页面之间发送数据,不一定是有关会话的信息。

关于数字 2,我设置了另一个会话变量来告知下一页 Post 数据是否已移动到会话。但是,每次我都必须重置该变量时,它只会使事情变得复杂和不整洁。

示例:我有一个将表单数据发送到验证页面的注册页面。两者都具有检查是否启用了 cookie 的标头。

发布

数据被发送到验证页面,如果有问题,我无法将数据发布回验证页面(告诉用户问题是什么),我必须设置一个带有注册错误的会话变量。每次,我都必须取消设置注册错误变量。

现在我认为我不需要验证页面上的cookie,但我不想要任何漏洞,我不知道我以后会添加什么。

回到问题

  1. 我需要检查每个页面上是否启用了 cookie。
  2. 我不知道是否我当前的应用程序是最有效的方法(重定向);它当然引起了很多问题
  3. 如果有人可以告诉我如何检查 cookie 而不重定向(并且不与其他任何东西),这和 溶液
  4. 我不想依赖javascript或隐藏形式;我想掌控体验
  5. 我需要在两个页面之间发送数据有效。不喜欢某些应用程序的会话,因为我需要设置和取消设置 每页的变量。

我知道这是一项艰巨的任务,但如果有人能提供帮助,我们将不胜感激!

如果中间页面所做的只是验证表单数据,请废弃它;只需在相同的PHP脚本中执行此操作即可。最简单的是,您可以拥有:

<?php
    $yourkey = 'goeshere';
    if (!isset($_COOKIE[$yourkey])) {
        setcookie($yourkey, $value, $expires);
    }
    if (isset($_POST['submit'])) {
        $errors = array();
        // do validation here
        // iterate over your fields and add any errors to $errors array
        if (empty($errors)) {
            // redirect if there are no errors, if you really need to
            header('Location: success.php');
            exit;
        }
    }
?>
<html>
  <body>
    <form method="post" action="">
      <label for="name">Your name:</label>
      <input type="text" name="name" value="<?php echo isset($_POST['name']) ? $_POST['name'] : ''; ?>" id="name" />
      <input type="submit" name="submit" value="Submit" />
    </form>
  </body>
</html>

在 HTML 页面中存在一个 XSS 漏洞echo POST 数据,但我会将其留给您来保护。

我不确定这是否有帮助,但也许您可以尝试限制页数?我通常做的是在一个 php 页面上进行表单和验证。您检查用户是否在开始时发送了某些内容,如果他发送了,请检查它并显示任何错误。如果没有,请显示表单。