2011-06-28 116 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?然後,您可以正常重定向,但數據對用戶不可見,它存儲在服務器端。

相關問題