2010-09-23 82 views
26

我可以發送一個字符串或另一條信息到另一個.php文件,而不用通過[不通過GET,但是通過POST符合我所知的]而不使用表單來暴露[發送沒有表格的POST數據

+3

聽起來像是你需要使用會話。 – Gazler 2010-09-23 17:23:10

+1

目前還不完全清楚你將數據發送到哪裏。是服務器到服務器還是服務器到服務器還是服務器到不同服務器? – buggedcom 2010-09-23 17:26:21

+0

好吧,我把它從一個文件傳遞到另一個文件在同一臺服務器上 – Samuel 2010-09-23 17:28:44

回答

21

如果您不想讓您的數據能夠被用戶看到,使用PHP會話。

用戶仍然可以訪問(和操作)發佈請求中的數據。

簽出this tutorial PHP會話。

+1

這不是一個好的解決方案,如果作者接受這是一個解決方法。還會話更容易劫持比手動請求(即通過「中間人」攻擊) – 2010-09-23 18:17:32

+1

爲什麼這是一個不好的解決方案?也許塞繆爾的過程是這樣的,劫持會議不是問題。真正解決會話劫持(以不顯眼的方式)的唯一方法是對所有與會話相關的請求使用SSL。如果Samuel擔心數據泄漏,他應該使用SSL。 – 2010-09-23 18:30:43

+2

@zolex,攔截郵件數據有什麼困難?使用WireShark運行的咖啡店就是你需要劫持POST數據的地方。使用cookies和發佈數據重新創建請求,並且您很好。如果你認爲會議是一個糟糕的解決方案,那麼SSL是唯一的好方案。 – riwalk 2010-09-24 18:44:59

15

如果您不想使用表單,則可以使用AJAX發送POST請求。

使用jQuery $.post方法也很簡單:

$.post('/foo.php', { key1: 'value1', key2: 'value2' }, function(result) { 
    alert('successfully posted key1=value1&key2=value2 to foo.php'); 
}); 
+0

我該怎麼做? – Samuel 2010-09-23 17:25:52

+0

這就是javascript。 AJAX =異步Javascript和XML – Gazler 2010-09-23 17:26:57

+0

@Samuel,現在如果你說沒有JavaScript被允許,那麼事情變得不可能:-) – 2010-09-23 17:29:16

5

看看PHP文檔的功能,您可以發送後使用它們reqeust。

fsockopen() 
fputs() 

或簡單地使用一個類似一個Zend_Http_Client其也基於套接字conenctions。

還發現了一個neat example使用谷歌...

8

與SESSION,而不是post發送數據。

session_start(); 
$_SESSION['foo'] = "bar"; 

你在哪裏收到的請求時,如果你絕對需要POST數據(一些奇怪的邏輯)的頁面,你可以在一開始做這個somwhere:

$_POST['foo'] = $_SESSION['foo']; 

POST數據將是有效的就像使用POST發送一樣。

然後銷燬會話(或者如果您需要該會話用​​於其他目的,則只需取消設置字段)。

破壞會話或取消設置字段很重要,因爲與POST不同,SESSION將保持有效,直到您明確銷燬它或直到瀏覽器會話結束爲止。如果你不這樣做,你可以觀察到一些奇怪的結果。例如:您使用sesson過濾一些數據。用戶打開過濾器並獲取過濾的數據。過了一段時間,他回到頁面,期望過濾器被重置,但不是:他仍然看到過濾的數據。

1

只需使用:file_get_contents()

// building array of variables 
$content = http_build_query(array(
      'username' => 'value', 
      'password' => 'value' 
      )); 
// creating the context change POST to GET if that is relevant 
$context = stream_context_create(array(
      'http' => array(
       'method' => 'POST', 
       'content' => $content,))); 

$result = file_get_contents('http://www.example.com/page.php', null, $context); 
//dumping the reuslt 
var_dump($result); 

Reference:我的回答類似的問題: