在php中重定向url的最佳方法?

在php中重定向url的最佳方法?,php,cakephp,curl,Php,Cakephp,Curl,我正在开发web应用程序(在php中),在这里我需要用一些参数重定向url header("Location:http://www.xyz.com?code=2345"); 这将重定向到相应的url,但我的数据在浏览器中可见,我不希望我的数据在浏览器中可见。如何隐藏数据?这是安全的重定向方式吗?重定向的最佳方式是什么?如果不想显示,则需要使用POST,如果不想显示,则需要使用not GET如果重定向到同一主机,则可以在会话中存储数据并通过cookie传输会话ID 或者,存储数据并发送会话ID。

我正在开发web应用程序(在php中),在这里我需要用一些参数重定向url

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

这将重定向到相应的url,但我的数据在浏览器中可见,我不希望我的数据在浏览器中可见。如何隐藏数据?这是安全的重定向方式吗?重定向的最佳方式是什么?

如果不想显示,则需要使用POST,如果不想显示,则需要使用not GET

如果重定向到同一主机,则可以在会话中存储数据并通过cookie传输会话ID


或者,存储数据并发送会话ID。目标系统读取会话ID,并根据会话ID从原始服务器请求原始数据。

如果重定向到同一主机,则可以将数据存储在会话中,并通过cookie传输会话ID


或者,存储数据并发送会话ID。目标系统读取会话ID,并根据会话ID从原始服务器请求原始数据。

在重定向之前如何设置会话中的变量:

session_start();
$_SESSION['code'] = 2345;
header("Location: http://www.xyz.com");

在重定向之前设置会话中的变量如何:

session_start();
$_SESSION['code'] = 2345;
header("Location: http://www.xyz.com");

使用CakePHP的内置函数进行重定向,但该变量仍将在URL中可见。

使用CakePHP的内置函数进行重定向,但该变量仍将在URL中可见。

为什么不在URL中使用GET参数来设置一些数据?然后,您可以正常重定向,但数据对用户不可见,它存储在服务器端。

为什么不在URL中使用GET参数将一些数据设置为?然后,您可以按正常方式重定向,但数据对用户不可见,它存储在服务器端。

可以重定向发送到当前请求的
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();
}

?>

可以重定向已发送到当前请求的
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();
}

?>


如果要重定向,就不要写任何输出(写输出然后重定向没有意义)?他指的是在他的url中可见的变量。你在使用CakePHP吗?您关心的是什么数据,URL中的
code=2345
?这是机密数据吗?您是重定向到同一个域(xyz.com->xyz.com)还是非域(abc.com->xyz.com)?哦,请始终记住使用exit();在头重定向之后;)否则,您的其余代码将被执行,这可能会导致不必要的结果。如果您要重定向,请不要编写任何输出(编写输出然后重定向是没有意义的)?他指的是url中可见的变量。您使用的是CakePHP吗?您关心的是什么数据,URL中的
code=2345
?这是机密数据吗?您是重定向到同一个域(xyz.com->xyz.com)还是非域(abc.com->xyz.com)?哦,请始终记住使用exit();在头重定向之后;)否则,您的其余代码将被执行,这可能会导致不必要的结果。不可能进行POST位置重定向。您可以使用CURL将postdata附加到请求。我从未说过POST位置重定向。如果他不想在URL上显示数据,那么一种方法就是POST@cweiske这不是不可能的,你只是不能单独使用HTTP。看到我的答案了。发布位置重定向是不可能的。您可以使用CURL将postdata附加到请求。我从来没有说过发布位置重定向。如果他不想在URL上显示数据,那么一种方法就是POST@cweiske这不是不可能的,你只是不能单独使用HTTP。看到我的答案了吗?是的,我很忙。我的意思是编写会话而不是获取:))。请参阅更新。谢谢大家,我正在重定向到不同的域,如何获取其他域中的会话数据?sry,我很忙。我的意思是编写会话而不是获取:))。请参阅更新。谢谢大家,我正在重定向到不同的域,如何获取其他域中的会话数据?