Лучший способ перенаправить URL-адрес в PHP? - PullRequest
1 голос
/ 28 июня 2011

Я работаю над веб-приложением (в php), где мне нужно перенаправить URL с некоторым параметром. Я написал код, подобный этому

header("Location:http://www.xyz.com?code=2345");

Это перенаправит на соответствующий URL, но мои данныеотображается в браузере, я не хочу, чтобы мои данные были видны в браузере. как скрыть данные?Это безопасный способ перенаправления?Каков наилучший способ перенаправления?

Ответы [ 6 ]

1 голос
/ 28 июня 2011

Используйте встроенную в CakePHP функцию перенаправления для перенаправления, но переменная все еще будет видна в URL.

0 голосов
/ 28 июня 2011

Можно перенаправить POST поля, которые были отправлены в текущий запрос (путем перенаправления с помощью 307), но создать их искусственно сложно и зависит от того, включен ли у пользователя JavaScript. Я использую эту функцию, но вы не должны зависеть от ее работы, если пользователь отключает JavaScript.

<?php

function createHiddenFields( $value, $name = NULL )
{
    $output = "";
    if( is_array( $value ) ) {
        foreach( $value as $key => $value ) {
            $output .= self::createHiddenFields( $value, is_null( $name ) ? $key : $name."[$key]" );
        }
    } else {
        $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />",
            htmlspecialchars( stripslashes( $name ) ),
            htmlspecialchars( stripslashes( $value ) )
        );
    }
    return $output;
}

function redirectNowWithPost( $url, array $post_array = NULL )
{
    if( is_null( $post_array ) ) { //we want to forward our $_POST fields
        header( "Location: $url", TRUE, 307 );
    } elseif( ! $post_array ) { //we don't have any fields to forward
        header( "Location: $url", TRUE );
    } else { //we have some to forward let's fake a custom post w/ javascript
        ?>
<form action="<?php echo htmlspecialchars( $url ); ?>" method="post">
<script type="text/javascript">
//this is a hack so that the submit function doesn't get overridden by a field called "submit"
document.forms[0].___submit___ = document.forms[0].submit;
</script>
<?php print createHiddenFields( $post_array ); ?>
</form>
<script type="text/javascript">
document.forms[0].___submit___();
</script>
        <?php
    }
    exit();
}

?>
0 голосов
/ 28 июня 2011

Вместо использования параметра GET в URL, почему бы не установить некоторые данные для сеанса ? Затем вы можете перенаправить в обычном режиме, но данные не видны пользователю, они хранятся на стороне сервера.

0 голосов
/ 28 июня 2011

Как насчет установки переменных в сеансе перед перенаправлением:

session_start();
$_SESSION['code'] = 2345;
header("Location: http://www.xyz.com");
0 голосов
/ 28 июня 2011

Если вы перенаправляете на тот же хост, вы можете сохранить данные в сеансе и передать идентификатор сеанса через cookie.

В качестве альтернативы вы сохраняете данные и тем не менее отправляете идентификатор сеанса. Целевая система считывает идентификатор сеанса и запрашивает исходные данные с исходного сервера на основе идентификатора сеанса.

0 голосов
/ 28 июня 2011

тогда вам нужно будет использовать POST, а не GET, если вы не хотите, чтобы он отображался

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...