2010-09-23 34 views
26

¿Puedo enviar, por ejemplo, una cadena u otra información a otro archivo .php sin que esté expuesto [así no por GET sino por POST conforme a lo que sé] sin usar un formulario?Enviando datos POST sin formulario

+3

suena como usted necesita utilizar sesiones. – Gazler

+1

No está del todo claro desde dónde se envían los datos desde y hacia. ¿Es cliente a servidor o servidor a servidor o servidor a servidor diferente? – buggedcom

+0

Bueno, lo paso de un archivo a otro en el mismo servidor – Samuel

Respuesta

21

Si no desea que sus datos sean vistos por el usuario, utiliza una sesión de PHP.

Los datos en una solicitud posterior aún son accesibles (y manipulables) por el usuario.

Pago this tutorial en PHP Sesiones.

+1

esto no es una buena solución, también si el autor lo aceptó como una solución alternativa. también las sesiones son más fáciles de secuestrar que manupilar una solicitud posterior (es decir, por un ataque de "hombre en el medio") –

+1

¿Por qué es esta una mala solución? Quizás el proceso de Samuel es tal que secuestrar la sesión no es un problema. La única forma de resolver verdaderamente el secuestro de sesión (de forma discreta) es usar SSL para todas las solicitudes relacionadas con la sesión. Si Samuel estaba preocupado por la filtración de los datos, debería usar SSL. –

+2

@zolex, ¿qué tiene de difícil interceptar datos de publicaciones? Sentarse en una cafetería con WireShark funcionando es todo lo que necesita para secuestrar los datos POST. Recrear la solicitud con cookies y publicar datos, y ya está listo para comenzar. Si considera que las sesiones son una mala solución, entonces SSL es la única buena solución. – riwalk

15

Puede usar AJAX para enviar una solicitud POST si no desea formularios.

Utilizando el método jQuery $.post es bastante simple:

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

¿cómo hago eso? – Samuel

+0

Eso es javascript. AJAX = Javascript asíncrono y XML – Gazler

+0

@Samuel, ahora si dices que no se permite javascript, entonces las cosas se vuelven bastante imposibles :-) –

5

eche un vistazo a la documentación de php para estas funciones que puede enviar después de utilizarlas.

fsockopen() 
fputs() 

o simplemente utilizar una clase como Zend_Http_Client que también se basa en el zócalo-conenctions.

también encontraron una neat example utilizando Google ...

8

Enviar sus datos con la sesión en lugar de correos.

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

En la página donde se reciba la solicitud, si es absolutamente necesario datos POST (un poco de lógica raro), puede hacer esto somwhere al principio:

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

Los datos enviados serán válidas lo mismo que si se envió con POST.

Luego destruya la sesión (o simplemente desarme los campos si necesita la sesión para otros fines).

Es importante destruir una sesión o desarmar los campos, porque a diferencia de POST, SESSION seguirá siendo válido hasta que lo destruya explícitamente o hasta el final de la sesión del navegador. Si no lo haces, puedes observar algunos resultados extraños. Por ejemplo: usa sesson para filtrar algunos datos. El usuario enciende el filtro y obtiene los datos filtrados. Después de un tiempo, regresa a la página y espera que el filtro se restablezca, pero no es así: todavía ve datos filtrados.

1

Utilice simplemente: 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: mi respuesta a una pregunta similar:

Cuestiones relacionadas