Можете ли вы перенести страницу переменных POST на страницу при перенаправлении? - PullRequest
1 голос
/ 13 сентября 2011

Для начала я не спрашиваю, могу ли я создать ответ POST с одной страницы на другую без использования формы или одного из подобных вопросов, которые могут прийти в голову.В начале нескольких моих страниц я автоматически включаю защиту https с помощью следующего оператора require:

<?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-адреса по человеку) любые переменные POST, сгенерированные из формы на странице 1, будут потеряны при перенаправлении.

Возможно, я задаю тот же вопрос, что и «нет формы», но если так, то любые советы о том, как обращаться с ними на основе требований, приветствуются.

Мысли

I может поместить все в сессию, но это кажется огромной тратой ресурсов.Если кто-то не может действительно показать иначе, я не считаю это решением.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Я видел другие вопросы, которые в основном задают тот же вопрос, и я считаю, что на самом деле невозможно сделать то, что вы хотите эффективно. Мое собственное мнение таково, что будет гораздо больше работы, чтобы сделать то, что вы хотите, чем просто развернуть 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, почему бы просто не сделать это? Я полагаю, что ресурсы, необходимые для выполнения запросов, которые необходимы и фактически используются, будут незначительными, поскольку вы действительно делаете это только на мгновение.

Если у вас нет сотен тысяч или миллионов одновременных обращений, я не могу представить, что вышесказанное является проблемным ресурсом. Если это так, то просто обработайте его перед перенаправлением. В любом случае, они уже отправили данные в открытом виде.

^ Кроме того, вам также потребуется обрабатывать загрузку файлов, если вам это нужно.

0 голосов
/ 13 сентября 2011

Если вы действительно не хотите создавать хранилище на стороне сервера, используйте перенаправление 307. Должен работать с любым HTTP / 1.1-совместимым браузером ... однако учтите, что вы не только будете использовать вдвое большую пропускную способность для данных POST (так как они отправляются дважды), но и браузеры должны запрашивать разрешение перед повторной отправкой на новый URL .

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

[edit: временное хранение на стороне сервера, вероятно, лучше. Лучше всего избегать необходимости перенаправления.]

...