如果重定向,你可以将POST变量页面带到页面吗?

时间:2011-09-13 00:31:23

标签: php variables post redirect

首先,我不会问我是否可以在不使用表格或可能会想到的类似问题的情况下从一个页面到另一个页面创建POST响应。在我的几个页面的开头,我使用以下require语句自动强制https安全性:

<?php
if($port == 80) {
    if($_SERVER['SERVER_PORT'] == 443) {
        header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER["REQUEST_URI"]);
        exit;
    }
} elseif ($port == 443) {
    if($_SERVER['SERVER_PORT'] == 80) {
        header('Location: https://'. $_SERVER['HTTP_HOST'] . $_SERVER["REQUEST_URI"]);
        exit;
    }
}
?>

其中$ port在调用PHP require之前直接设置。在某些情况下,从http指向https(或只是按人员更改URL),从第1页上的表单生成的任何POST变量都将在重定向中丢失。

也许我问的问题与“没有形式”相同,但如果是这样的话,任何有关如何根据要求处理的建议都会受到赞赏。

思想

可以将所有内容都放入SESSION,但这似乎是对资源的巨大浪费。除非有人能够真正表现出来,否则我不认为这是一个解决方案。

2 个答案:

答案 0 :(得分:1)

我已经看到其他问题提出了基本相同的问题,而且我认为不可能有效地做你想做的事情。我个人认为,制作你想要的东西比制作SESSION只需要做更多的工作:

<?php

session_start();

if (!is_array($_SESSION['posted'])) {
    $_SESSION['posted'] = array('test'=>'test');
} else {
    $_POST = $_SESSION['posted'];
    unset($_SESSION['posted']);
}

echo '<pre>';
echo "<strong>POST:</strong>\n";
print_r($_POST);
echo "\n";
echo "<strong>SESSION:</strong>\n";
print_r($_SESSION);

?>

*注意:我的服务器上没有SSL设置,所以我无法具体说明。这是为了演示仅从POST存储的数组重新定义SESSION数组。

http://jfcoder.com/test/postsession.php(刷新以查看更改。)

因此,如果您可以轻松地重建POST数组,为什么不这样做呢?我认为需要和实际使用的请求所需的资源可以忽略不计,因为你真的只是暂时这样做。

除非你有数十万或数百万的并发命中,否则我无法想象上述问题是资源问题。如果是,那么只需在重定向之前处理它。无论如何,他们已经明确地发送了数据。

^此外,如果您需要,还需要处理文件上传。

答案 1 :(得分:0)

如果您确实不想进行任何服务器端存储,请使用307重定向。应该适用于任何符合HTTP / 1.1标准的浏览器...但请注意,您不仅要使用两倍的POST数据带宽(因为它发送了两次),但浏览器需要在重新提交到新URL之前请求许可

header('HTTP/1.1 307 Temporary Redirect'); header('location: .... );

[编辑:临时存储服务器端可能更好。根本不需要重定向是最好的。]