i modified my previous code. you can see my previous post if your intersted setting cookie through curl But here is a fresh beginning my new code looks linke this i have a php file using curl like this
<?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);
?>
the file test_cookies.php looks like this
<?php
if($_COOKIE['user']==1)
{
header("Set-Cookie:user=1; color=blue");
header("Location:http://localhost/javascript%20cookies/test_cookies.html");
}
?>
the file test_cookies.html has some javascript that checks for cookies and if it finds those cookies then it displays the text accordingly. the php file with curl code is sending the cookies and the test_cookies.php is setting the cookie and redirecting to the page test_cookies.html but this page is not receiving the cookies and thus it is not not showing the content accordingly. can somebody tell me whats the problem now?
here are the headers i get displayed in firefox on setting CURLOPT_HEADER to 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
you can see that there are two set of headers displayed.is this because i am making 2 calls to header?
i will now explain what i was trying to do. i had an html page that asked for some verification code and then it sent that verification code to a php script which on verifying the code set a cookie and redirected to the same html page. the html page had some externally linked javascript which on checking the cookie value displayed the content of the page with some tweaking. i am now writing the code for this
the html file with content and form
the php file which verifies the code
and now the php file with curl code
this finally worked and the browser is displaying the tweaked content. this thing taught me a lot about http. Thanks to all who helped me when i was in dark.
It is not clear what you are trying to achieve with the code. You'd get better help if you explain why you are doing this. It is probable that your approach is wrong and you could get the ultimate result with a different/simpler approach.
And now to answer your question, this is what happens:
curl.php
(the name I use for your first file),cookie.txt
and findsuser=1
, so it sends a GET request totest_cookies.php
and sends the cookie with the requesttest_cookies.php
sees thatuser=1
is true, so it sends a header tocurl.php
and asks it to set two cookies:user=1
andcolor=blue
(for the first cookie this is pointless, user=1 is already set, but let's ignore this as no harm is done)CURLOPT_COOKIEJAR
option, so whencurl.php
receives the set cookie header it does not give a damn (nothing happens)test_cookies.php
sends a redirect header tocurl.php
, since you have setCURLOPT_FOLLOWLOCATION,1
,curl.php
sends another GET request, this time to gettest_cookies.html
test_cookies.html
is returned tocurl.php
,curl_exec($ch);
causes the returned content (source oftest_cookies.html
) be echoed back to your browser,user
and does not find one, so it displays content for when there is no cookie (because there isn't).Now, you may wonder what happens if you add:
What happens is that your
cookie.txt
will be updated in step 4 and will have two cookies;user=1
andcolor=blue
. But this does NOT give you the result you expect. Becauseheader("Set-Cookie:user=1; color=blue");
is instructing curl to set the cookie, and curl does this by storing the cookies in the file you specified inCURLOPT_COOKIEJAR
option. So, even though you added that option, when you reach step 8 javascript will not find that cookie, because the browser you use does not know or care about yourcookie.txt
, it looks somewhere else to check if a cookie exists. In Google Chrome for instance the format is SQLite and for XP the cookies are stored in%USERPROFILE%\Local Settings\Application Data\Google\Chrome\User Data\Default\Cookies
.