2010-05-02 71 views
0

我不确定我是否正确地问这个问题。cURL影响PHP中的Cookie检索?

我有两个PHP页面位于同一台服务器上。第一个PHP页面设置一个到期的cookie,第二个检查cookie是否被设置。如果已设置,则返回“开”。如果未设置,则返回“关闭”。

如果我只是运行的页面,如
“www.example.com/set_cookie.php”

“www.example.com/is_cookie_set.php”
我得到一个 “上的” 从is_cookie_set .PHP。

继承人问题,在set_cookie.php文件我有一个叫做is_set的函数。该函数执行以下cURL并返回内容(“on”或“off”)。不幸的是,内容总是返回“关闭”。不过,如果我手动检查文件(“www.example.com/is_cookie_set.php”),我可以看到cookie已设置。

继承人的功能:

<?php 
function is_set() 
{ 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, 'http://example.com/is_cookie_set.php'); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$contents = curl_exec ($ch); 

curl_close ($ch); 

echo $contents; 
} 
?> 

请注意,我没有使用卷曲获取或设置饼干,只检查检查,如果cookie中设定的页面。

我查看了CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE,但我相信这些是通过cURL设置cookie,我不想这样做。

回答

0

我相信你在制造混乱。当你使用curl的时候,PHP会面临像客户端(比如浏览器)的麻烦,并且为你提出这个请求。也就是说,curl所检查的cookie与当前浏览器中的cookie无关。我认为。

0

我不完全确定你在这里要做什么,但你知道,因为nc3b已经说明,在你的is_set()函数中,PHP充当客户端而不是你的浏览器,对吗?这意味着你的cookie测试总是失败(=没有cookie返回)。

Cookie由客户端存储,并与每个请求一起发送到服务器。

如果你想知道PHP是否设置了cookie - 当然,你需要与cookie相同 - 你可以使用普通的if (isset($_COOKIE["cookiename"]))

也许你正在尝试构建一个解决方案来查询远程主机上的cookie。对于这一点,看到这个SO问题:

0

卷曲就像你的浏览器作为HTTP客户端。 如果配置它们都可以接收和存储cookie,但它们无关。

Curl不使用浏览器cookie。如果你想使用你的浏览器cookies,你必须使用--cookie选项开关。有关详细信息,请参见手册页:http://curl.haxx.se/docs/manpage.html
例如,Firefox将它们存储在名为cookies.txt的文件中。 在linux下它位于〜/ .mozilla/firefox/$ profilefolder/cookies下。txt

提示:如果您使用Firefox> = 3.0,则Cookie存储在sqlite数据库中。如果你想用curl来使用它们,你必须自己提取一个cookies.txt文件。 这里有一些例子,说明如何做到这一点: