Intereting Posts
Получение подобной долготы и широты из базы данных сохранить значение checkbox в базе данных mysql PHP: как создать Geo-Fence (ограничивающий блок) с использованием расстояния от набора кодов сообщение на стене страницы поклонника как страница с другого сайта PHP как присоединиться к двум таблицам в mongodb symfony2: как получить доступ к сервису из шаблона Как я могу обновить только определенные поля в структуре Yii? Почему bitmapdata не отправляется на сервер со вспышкой? PHP mysql_stmt :: fetch () дает устаревшую память ошибок PHP В PHP есть ли простой способ получить первую и последнюю дату месяца? Найти и заменить слово в текстовом файле Как создать плагин для резервного копирования конкретной таблицы в базе данных WordPress? PHP Apple iOS Push Notifications: Command2: бинарный интерфейс и формат уведомлений Как получить изображения, перечисленные в комплекте соната Использование метода статического класса для * Быстро * Сортировка массива по ключевым значениям в PHP

html-страница не получает файлы cookie через libcurl

Я изменил свой предыдущий код. вы можете увидеть мой предыдущий пост, если ваш intersted настройки cookie через curl Но вот новое начало мой новый код выглядит ссылкой, у меня есть php-файл, используя curl, как это

<?php $ch=curl_init(); $url="http://localhost/javascript%20cookies/test_cookies.php"; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_COOKIEFILE,dirname(__FILE__) . "/cookie.txt"); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_exec($ch); curl_close($ch); ?> 

файл test_cookies.php выглядит так:

 <?php if($_COOKIE['user']==1) { header("Set-Cookie:user=1; color=blue"); header("Location:http://localhost/javascript%20cookies/test_cookies.html"); } ?> 

файл test_cookies.html имеет некоторый javascript, который проверяет наличие файлов cookie, и если он находит эти файлы cookie, тогда он отображает текст соответствующим образом. php-файл с curl-кодом отправляет файлы cookie, а test_cookies.php устанавливает cookie и перенаправляется на страницу test_cookies.html, но эта страница не принимает файлы cookie и, следовательно, не отображает контент соответствующим образом. может кто-нибудь сказать мне, в чем проблема сейчас?

вот заголовки, которые я отображаю в firefox при установке CURLOPT_HEADER в true

 HTTP/1.1 302 Found Date: Mon, 16 May 2011 15:03:59 GMT Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.1 Set-Cookie: user=1; color=blue Location: http://localhost/javascript%20cookies/test_cookies.html Content-Length: 0 Content-Type: text/html HTTP/1.1 200 OK Date: Mon, 16 May 2011 15:03:59 GMT Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 Last-Modified: Mon, 16 May 2011 12:13:24 GMT ETag: "11000000013d0c-493-4a363950a70f3" Accept-Ranges: bytes Content-Length: 1171 Content-Type: text/html 

вы можете увидеть, что отображается два набора заголовков. Это потому, что я делаю 2 вызова в заголовке?

Related of "html-страница не получает файлы cookie через libcurl"

Непонятно, чего вы пытаетесь достичь с помощью кода. Если вы объясните, почему вы это делаете, вам поможет. Вероятно, ваш подход неверен, и вы можете получить конечный результат с помощью другого / более простого подхода.

И теперь, чтобы ответить на ваш вопрос, вот что происходит:

  1. Из вашего браузера вы отправляете запрос GET на curl.php (имя, которое я использую для вашего первого файла),
  2. curl в этом файле проверяет файл cookie.txt и находит user=1 , поэтому он отправляет запрос GET на test_cookies.php и отправляет cookie с запросом
  3. test_cookies.php видит, что user=1 истинно, поэтому он отправляет заголовок curl.php и просит его установить два user=1 cookie: user=1 и color=blue (для первого файла cookie это бессмысленно, пользователь = 1 уже установлен , но давайте проигнорируем это, поскольку никакого вреда не будет сделано)
  4. Вы не установили параметр CURLOPT_COOKIEJAR , поэтому, когда curl.php получает заданный заголовок cookie, он не чертовски (ничего не происходит)
  5. Затем test_cookies.php отправляет заголовок redirect в curl.php , так как вы установили CURLOPT_FOLLOWLOCATION,1 , curl.php отправляет другой запрос GET, на этот раз, чтобы получить test_cookies.html
  6. Содержимое test_cookies.html возвращается curl.php ,
  7. curl_exec($ch); приводит к тому, что возвращаемый контент (источник test_cookies.html ) будет отозван обратно в ваш браузер,
  8. Ваш браузер анализирует, что он получил, и выполняется javascript. Он проверяет куки-файл с именем user и не находит его, поэтому он отображает содержимое, когда нет cookie (потому что его нет).

Теперь вы можете задаться вопросом, что произойдет, если вы добавите:

 curl_setopt($ch,CURLOPT_COOKIEJAR,dirname(__FILE__) . "/cookie.txt"); 

Случается, что ваш cookie.txt будет обновлен на шаге 4 и будет иметь два cookie.txt cookie; user=1 и color=blue . Но это НЕ дает вам результат, которого вы ожидаете. Потому что header("Set-Cookie:user=1; color=blue"); инструктирует завиток, чтобы установить файл cookie, и завиток делает это, сохраняя файлы cookie в файле, указанном в опции CURLOPT_COOKIEJAR . Таким образом, даже если вы добавили этот параметр, когда вы достигнете шага 8, javascript не найдет этот файл cookie, потому что используемый вами браузер не знает или не заботится о вашем cookie.txt , он смотрит в другом месте, чтобы проверить, существует ли файл cookie. В Google Chrome, например, формат SQLite и для XP файлы cookie хранятся в %USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Cookies .

теперь я объясню, что я пытался сделать. У меня была html-страница, в которой был запрошен некоторый код проверки, а затем он отправил этот код проверки в php-скрипт, который при проверке кода установил куки-файл и перенаправлен на одну и ту же страницу html. на странице html был некоторый внешний javascript, который при проверке значения cookie отображал содержимое страницы с некоторой настройкой. теперь я пишу код для этого

html-файл с содержимым и формой

test_cookies.html

  //some css,javascript and html and then a form <form method="post" action="http://localhost/javascript%20cookies/test_cookies.php"> 

php-файл, который проверяет код

test_cookies.php

 if($_POST['value']=="code") setcookie("user",1); if($_POST['value']!="code") setcookie("user",1,time()-1); header("Location:http://localhost/javascript%20cookies/test_cookies.html"); 

и теперь php-файл с curl-кодом

curl_cookies.php

 <?php $ch=curl_init(); $url="http://localhost/javascript%20cookies/test_cookies.php"; $post="value=code"; //here i have hard-coded the pst value for a demo but i could have got this from the user curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $res=curl_exec($ch); curl_close($ch); preg_match('/Location: (.*)\s/',$res,$location); preg_match('/Set-Cookie: (.*)\s/',$res,$cookie); $cookie=rtrim($cookie[0])."; path=/ "; //path needed to be changed because curl_cookies.php and test_cookies.html are in different directories. header($cookie); header($location[0]); ?> 

это, наконец, сработало, и браузер отображает измененный контент. эта вещь научила меня много о http. Спасибо всем, кто помог мне, когда я был в темноте.