我最近问了这个问题使用 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,我很快意识到这不是一个很好的解决方案;
- 重定向时,如果我将 Post 数据设置为会话变量(存储数据),则每个使用 Post 数据的页面都需要检查数据是在 Post 还是在 Session 中。
- 效率不高 - 我在两个页面之间发送数据,不一定是有关会话的信息。
关于数字 2,我设置了另一个会话变量来告知下一页 Post 数据是否已移动到会话。但是,每次我都必须重置该变量时,它只会使事情变得复杂和不整洁。
示例:我有一个将表单数据发送到验证页面的注册页面。两者都具有检查是否启用了 cookie 的标头。
发布数据被发送到验证页面,如果有问题,我无法将数据发布回验证页面(告诉用户问题是什么),我必须设置一个带有注册错误的会话变量。每次,我都必须取消设置注册错误变量。
现在我认为我不需要验证页面上的cookie,但我不想要任何漏洞,我不知道我以后会添加什么。
回到问题
- 我需要检查每个页面上是否启用了 cookie。
- 我不知道是否我当前的应用程序是最有效的方法(重定向);它当然引起了很多问题
- 如果有人可以告诉我如何检查 cookie 而不重定向(并且不与其他任何东西),这和 溶液
- 我不想依赖javascript或隐藏形式;我想掌控体验
- 我需要在两个页面之间发送数据有效。不喜欢某些应用程序的会话,因为我需要设置和取消设置 每页的变量。
我知道这是一项艰巨的任务,但如果有人能提供帮助,我们将不胜感激!
如果中间页面所做的只是验证表单数据,请废弃它;只需在相同的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 页面上进行表单和验证。您检查用户是否在开始时发送了某些内容,如果他发送了,请检查它并显示任何错误。如果没有,请显示表单。