2010-09-23 39 views
26

Czy mogę wysłać na przykład ciąg lub inną informację do innego pliku .php bez jego ujawnienia [a więc nie przez GET, ale przez POST zgodny z tym, co wiem] bez użycia formularza?Wysyłanie danych POST bez formularza

+3

brzmi jak trzeba użyć sesje. – Gazler

+1

Nie jest całkowicie jasne, skąd wysyłane są dane od i do. Czy jest to klient na serwer lub serwer na serwer lub serwer na inny serwer? – buggedcom

+0

dobrze przekazać go z jednego pliku do drugiego na tym samym serwerze – Samuel

Odpowiedz

21

Jeśli nie chcesz, aby Twoje dane były postrzegane przez użytkownika, należy użyć sesji PHP.

Dane w żądaniu pocztowym są nadal dostępne (i możliwe do manipulowania) przez użytkownika.

Zamówienie this tutorial na sesjach PHP.

+1

to nie jest dobre rozwiązanie, także jeśli autor zaakceptował to jako obejście. również sesje są łatwiejsze do przejęcia niż wywoływanie postów (np. przez atak "człowiek w środku"). –

+1

Dlaczego to jest złe rozwiązanie? Być może proces Samuela jest taki, że porwanie sesji nie jest problemem. Jedynym sposobem na naprawdę skuteczne porwanie sesji (w dyskretny sposób) jest użycie protokołu SSL dla wszystkich żądań związanych z sesją. Jeśli Samuel martwił się o wyciek danych, powinien użyć SSL. –

+2

@zolex, co jest tak trudne w przechwytywaniu danych pocztowych? Siedzenie w kawiarni z uruchomieniem WireShark to wszystko, czego potrzebujesz do przejęcia danych POST. Odtworzyć żądanie z plików cookie i danych pocztowych, i jesteś dobry, aby przejść. Jeśli uważasz sesje za złe rozwiązanie, SSL jest jedynym dobrym rozwiązaniem. – riwalk

15

Możesz użyć AJAX do wysłania żądania POST, jeśli nie chcesz formularzy.

jQuery $.post sposób jest dość prosty:

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

jak to zrobić? – Samuel

+0

To jest javascript. AJAX = Asynchroniczny Javascript i XML – Gazler

+0

@Samuel, teraz, jeśli powiesz, że nie jest dozwolony javascript, to rzeczy stają się raczej niemożliwe :-) –

5

zajrzyj do dokumentacji php na temat tych funkcji, które możesz wysłać za pomocą poczty.

fsockopen() 
fputs() 

lub po prostu użyć klasy jak Zend_Http_Client który opiera się również na Gniazdko conenctions.

znaleźć również neat example używając google ...

8

Wyślij swoje dane z SESJI zamiast postu.

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

Na stronie gdzie otrzymasz wniosek, jeśli koniecznie musisz danych post (niektóre dziwne Logic), można to zrobić Gdzieś na początku:

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

Dane post będzie ważny tak samo, jakby był wysłany z POST.

Następnie zniszcz sesję (lub po prostu odznacz pola, jeśli potrzebujesz sesji do innych celów).

Ważne jest, aby zniszczyć sesję lub anulować ustawienie pól, ponieważ w przeciwieństwie do POST, SESJA pozostanie ważna do momentu jej całkowitego zniszczenia lub zakończenia sesji przeglądarki. Jeśli tego nie zrobisz, możesz zaobserwować dziwne wyniki. Na przykład: używasz programu sesson do filtrowania niektórych danych. Użytkownik włącza filtr i pobiera przefiltrowane dane. Po chwili wraca do strony i oczekuje, że filtr zostanie zresetowany, ale tak nie jest: nadal widzi przefiltrowane dane.

1

Wystarczy użyć: 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: moja odpowiedź na podobne pytanie:

Powiązane problemy