我正在开发web应用程序(在php中),我需要使用一些参数重定向url。我已经编写了这样的代码
header("Location:http://www.xyz.com?code=2345");
这将重定向到相应的网址,但我的数据在浏览器中可见,我不希望我的数据在浏览器中可见。我是否隐藏数据?这是重定向的安全方式吗?重定向的最佳方法是什么?
答案 0 :(得分:1)
使用CakePHP的内置redirect function进行重定向,但该变量仍会在网址中显示。
答案 1 :(得分:0)
你需要使用POST,而不是GET,如果你不想显示它
答案 2 :(得分:0)
如果您重定向到同一主机,则可以将数据存储在会话中并通过cookie传输会话ID。
或者,您可以存储数据并发送会话ID。目标系统读取会话ID并根据会话ID从原始服务器请求原始数据。
答案 3 :(得分:0)
如何在重定向之前在会话中设置变量:
session_start();
$_SESSION['code'] = 2345;
header("Location: http://www.xyz.com");
答案 4 :(得分:0)
为什么不将某些数据设置为session,而不是在URL中使用GET参数?然后,您可以正常重定向,但数据对用户不可见,它存储在服务器端。
答案 5 :(得分:0)
可以将已发送的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();
}
?>