我不确定我是否正确地问这个问题。
我有两个PHP页面位于同一台服务器上。第一个PHP页面设置一个带有过期的cookie,第二个PHP页面检查是否设置了该cookie。如果设置,则返回“on”。如果未设置,则返回“off”。
如果我只是运行这些页面
“www.example.com/set_cookie.php”
AND
“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;
}
?>
请注意,我没有使用cURL获取或设置cookie,只检查检查cookie是否已设置的页面。
我查看了CURLOPT_COOKIEJAR和CURLOPT_COOKIEFILE,但我相信这些是通过cURL设置cookie而我不想这样做。
答案 0 :(得分:0)
我相信你是在混淆。当您使用curl时,PHP会遇到像客户端(可能像浏览器一样)的问题,并为您提出请求。也就是说,卷曲检查的cookie与当前浏览器中的cookie无关。我想。
答案 1 :(得分:0)
我不完全确定你在这里要做什么,但你知道,正如nc3b已经指出的那样,在你的is_set()
函数中,它是PHP充当客户端而不是你的浏览器,对吧?这意味着您的cookie测试将始终失败(=没有cookie返回)。
Cookie由客户存储,并随每个请求一起发送到服务器。
如果你想在PHP中找出是否已经设置了cookie - 当然,你需要与cookie相同的域 - 你可以使用普通的if (isset($_COOKIE["cookiename"]))
。
也许您正在尝试构建一个解决方案来查询远程主机上的cookie。为此,请参阅此SO问题:
答案 2 :(得分:0)
Curl就像你的浏览器一样充当了http客户端。 如果配置它们,它们都会接收并存储cookie,但它们并不相关。
Curl不使用浏览器cookie。如果要使用浏览器cookie,则必须使用--cookie选项开关。有关详细信息,请参阅联机帮助页:http://curl.haxx.se/docs/manpage.html
例如,Firefox将它们存储在名为cookies.txt的文件中。
在linux下它位于〜/ .mozilla / firefox / $ profilefolder / cookies.txt
提示:如果您使用Firefox&gt; = 3.0,则cookie存储在sqlite数据库中。如果要将它们与curl一起使用,则必须自己提取cookies.txt文件。 以下是如何执行此操作的一些示例:
http://slacy.com/blog/2010/02/using-cookies-sqlite-in-wget-or-curl/
sqlite3 -separator $'\t' cookies.sqlite \
'select host, "TRUE", path, case isSecure when 0 then "FALSE" else "TRUE" end, expiry, name, value from moz_cookies' > cookies.txt