tiempo sesiones ejemplos destruir delete cookie _cookie php cookies

php - sesiones - No se pueden enviar cookies con file_get_contents



tiempo en cookies php (4)

Asegúrese de que file1.php exista en el servidor. ¡Intenta abrirlo en tu propio navegador para asegurarte!

Estoy tratando de obtener el contenido de otro archivo con file_get_contents (no preguntes por qué). Tengo dos archivos: test1.php y test2.php. Test1.php devuelve una cadena, se basa en el usuario que ha iniciado sesión.

Test2.php intenta obtener los contenidos de test1.php y está siendo ejecutado por el navegador, obteniendo así las cookies.

Para enviar las cookies con file_get_contents, creo un contexto de transmisión:

$opts = array(''http'' => array(''header''=> ''Cookie: '' . $_SERVER[''HTTP_COOKIE'']."/r/n"))`;

Estoy recuperando los contenidos con:

$contents = file_get_contents("http://www.domain.com/test1.php", false, $opts);

Pero ahora me sale el error:

Advertencia: file_get_contents ( http://www.domain.com/test1.php ) [function.file-get-contents]: error al abrir la secuencia: ¡Falló la solicitud HTTP! HTTP / 1.1 404 no encontrado

¿Alguien sabe lo que estoy haciendo aquí?

editar: se olvidó de mencionar: sin el contenido de la transmisión, la página simplemente carga. Pero sin las cookies no obtengo la información que necesito.


En primer lugar, esto es probablemente solo un error en su pregunta, pero el tercer argumento para file_get_contents () debe ser su contexto de transmisión, NO el conjunto de opciones. Ejecuté una prueba rápida con algo como esto, y todo funcionó como esperaba

$opts = array(''http'' => array(''header''=> ''Cookie: '' . $_SERVER[''HTTP_COOKIE'']."/r/n")); $context = stream_context_create($opts); $contents = file_get_contents(''http://example.com/test1.txt'', false, $context); echo $contents;

El error indica que el servidor está devolviendo un 404. Trate de recuperar el URL del equipo en el que PHP se ejecuta y no desde su estación de trabajo / computadora de escritorio / portátil. Es posible que su servidor web tenga problemas para llegar al sitio, que su máquina local tenga una copia almacenada en caché o alguna otra falla de la red.

Asegúrese de repetir su solicitud exacta al ejecutar esta prueba, incluida la cookie que está enviando (la línea de comando curl es buena para esto). Es muy posible que la página en cuestión se cargue bien en un navegador sin la cookie, pero cuando envía la cookie, el sitio realmente devuelve un 404.

Asegúrate de que $ _SERVER [''HTTP_COOKIE''] tenga la cookie cruda que crees que tiene.

Si está raspando la pantalla, descargue Firefox y una copia de la extensión LiveHTTPHeaders. Realice todos los pasos necesarios para llegar a la página que desee en Firefox. Luego, usando la salida de LiveHTTPHeaders, recree exactamente la misma solicitud de requence. Incluye cada encabezado, no solo las cookies.

Finalmente, PHP Curl existe por una razón. Si es posible, (¡no lo estoy preguntando!) Utilícelo en su lugar. :)


Solo por curiosidad, ¿estás intentando file_get_contents en una página que tiene espacio? Recuerdo que traté de usar fgc en una URL que tenía un espacio en el nombre y, aunque mi navegador web lo analizó bien, fgc no lo hizo. Terminé teniendo que usar un str_replace para reemplazar '''' por ''% 20''.

Creo que esto debería haber sido relativamente fácil de detectar, ya que solo reportaría la mitad del nombre del archivo. Además, noté en una de estas publicaciones, alguien usó / r / n mientras definía los encabezados. Tenga en cuenta que a PHP no le gusta que estén entre comillas simples, pero funcionan bien en doble.


Solo para compartir esta información. Al usar session_start() , PHP bloquea el archivo de la sesión. Por lo tanto, el script real es el único script que puede acceder al archivo de sesión. Si intenta acceder a través de fsockopen() o file_get_contents() puede esperar mucho tiempo desde que intenta abrir un archivo que se ha bloqueado.

Una forma de resolver este problema es usar session_write_close() para desbloquear el archivo y volverlo a bloquear después con session_start() .

Ejemplo:

<?php $opts = array(''http'' => array(''header''=> ''Cookie: '' . $_SERVER[''HTTP_COOKIE'']."/r/n")); $context = stream_context_create($opts); session_write_close(); // unlock the file $contents = file_get_contents(''http://120.0.0.1/controler.php?c=test_session'', false, $context); session_start(); // Lock the file echo $contents; ?>

Como file_get_contents() es una función de bloqueo, ambas secuencias de comandos no estarán en concurrencia al intentar modificar el archivo de sesión.

Pero estoy seguro de que esta no es la mejor manera de manipular la sesión con una extensión de conexión.

Por cierto: es más rápido que cURL y fsockopen()

Avísame si encuentras algo mejor.