2011-06-28 80 views
1

我在Web应用程序中(PHP),在那里我需要重定向URL正与一些parameter.I写了这样在php中重定向url的最佳方式是什么?

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

该代码会重定向到相应的网址,但我的数据中可见浏览器,我不希望我的数据在browser.how中可见,以隐藏数据?这是重定向的安全方式吗?什么是重定向的最佳方式?

+0

只要不写任何输出,如果你要重定向(没有意义写输出,然后重定向)? –

+0

他意味着他的网址中可见的变量。 – TJHeuvel

+0

你在使用CakePHP吗?你关心的是哪些数据,URL中的“code = 2345”?这是秘密数据吗? – deceze

回答

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(); 
} 

?> 
0

你需要使用POST的话,没有得到,如果你不希望它显示

+1

POST位置重定向是不可能的。 – cweiske

+0

您可以使用CURL将postdata附加到请求。 – TJHeuvel

+0

我从来没有说POST位置重定向。如果他不希望数据显示在URL上,那么一种方法是POST – mikeq

0

如果您重定向到同一主机,可以将数据存储在了会议,并通过cookie的传输会话ID做。

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

0

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

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

这甚至可能吗? – Phliplip

+0

sry,我很匆忙。我的意思是写会话而不是:))。请参阅更新。 –

+1

谢谢大家,我重定向到不同的域,如何获取其他域中的会话数据? – pushpa

0

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

相关问题