2010-09-23 13 views
26

Posso inviare ad esempio una stringa o un altro pezzo di informazioni ad un altro file .php senza che sia esposto [quindi non da GET, ma da POST conformarsi a quello che so] senza l'utilizzo di un modulo?Invio di dati POST senza forma

+3

Suona come è necessario utilizzare le sessioni. – Gazler

+1

Non è del tutto chiaro dove si stanno inviando i dati da e verso. È client su server o server su server o server su server diversi? – buggedcom

+0

ben passo lungo da un file all'altro sullo stesso server – Samuel

risposta

21

Se non si desidera che i dati per essere visto da parte dell'utente, utilizza una sessione di PHP.

dati in una richiesta POST è ancora accessibile (e manipolabile) da parte dell'utente.

Checkout this tutorial su PHP Sessions.

+1

questa non è una buona solu zione, anche se l'autore ha accettato questo come soluzione alternativa. anche le sessioni sono molto più facili da dirottare rispetto alla manuplicazione di una richiesta di posta (per esempio da un attacco di "uomo nel mezzo") –

+1

Perché questa è una cattiva soluzione? Forse il processo di Samuel è tale che il dirottamento della sessione non è un problema. L'unico modo per risolvere veramente il dirottamento di sessione (in modo non invadente) sta usando SSL per tutte le richieste relative alla sessione. Se Samuel era preoccupato per i dati trapelati, dovrebbe usare SSL. –

+2

@zolex, cos'è così difficile intercettare i dati dei post? Sedersi in un bar con WireShark è tutto ciò che serve per dirottare i dati POST. Ricrea la richiesta con i cookie e pubblica i dati, e sei a posto. Se consideri le sessioni come una cattiva soluzione, allora SSL è l'unica soluzione valida. – riwalk

15

È possibile utilizzare AJAX per inviare una richiesta POST se non si desidera moduli.

Usando il metodo di jQuery $.post E 'abbastanza semplice:

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

come faccio? – Samuel

+0

Che è javascript. AJAX = Asynchronous Javascript e XML – Gazler

+0

@ Samuel, ora se dici che non è consentito javascript, le cose diventano piuttosto impossibili :-) –

5

uno sguardo alla documentazione di PHP per theese funzioni è possibile inviare posta reqeust li utilizzano.

fsockopen() 
fputs() 

o semplicemente utilizzare una classe come Zend_Http_Client che si basa anche su zoccolo-conenctions.

trovato anche una neat example utilizzando google ...

8

inviare i tuoi dati con SESSIONE piuttosto che dopo.

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

nella pagina in cui si riceve la richiesta, se è assolutamente necessario dati POST (un po 'di logica strano), si può fare questo somwhere all'inizio:

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

i dati POST saranno valide proprio come se fosse stato inviato con POST.

poi distruggere la sessione (o semplicemente unset i campi se è necessario la sessione per altri scopi).

È importante distruggere una sessione o disinserire i campi, perché diversamente dal POST, SESSIONE rimarrà valida finché non la distruggerete esplicitamente o fino alla fine della sessione del browser. Se non lo fai, puoi osservare alcuni strani risultati. Ad esempio: si usa sesson per filtrare alcuni dati. L'utente attiva il filtro e ottiene i dati filtrati. Dopo un po ', torna alla pagina e si aspetta che il filtro venga ripristinato, ma non lo è: vede ancora i dati filtrati.

1

utilizzare semplicemente: 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: la mia risposta a una domanda simile: