我在站点B上从站点A到CURL进行日志记录,我从连接中获取cookie并写入名为cookie.txt的文件。
但是当我传递cookie数据以进行最终标题重定向时('位置:http://examplesiteb.com'),它会返回断开连接。
我用于连接的代码与其他帖子中的代码相同,但是我的修改遵循@ramrider用户的建议,我建议在标题中传递cookie,但我不是确定如何做到这一点。
Transfer cookies & session from CURL to header location
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 10);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
// Download the given URL, and return output
$output = curl_exec($ch);
// Cookie Match
preg_match_all('/^Set-Cookie:\s*([^\r\n]*)/mi', $output, $ms);
$cookies = array();
foreach ($ms[1] as $m) {
list($name, $value) = explode('=', $m, 2);
$cookies[$name] = $value;
header('Set-Cookie: '.rawurlencode($name).'='.rawurlencode($value));
}
//print_r($cookies);
$redirect = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
header("Location: $redirect");
//Close Match
curl_close($ch);
重定向发生但未保持登录状态。
示例cookie文件
下面# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_example.com FALSE / FALSE 0 ASP.NET_SessionId 10gtonkebkteuazx24sajlh2
#HttpOnly_example.com FALSE / TRUE 1515800212 DTE 898EC9C0EF0BA3985E402046547931EAA55808E14A2DE469F11F6F6C0CF9A28871C8704BE794885CDF7D3EE1E8B06698166F86C184C5B53FE61FA53CA13682C562E17BCB7B2FA16D7A7180E6EA973735
用户@ martijn-pieters和@ waqas-bukhary,如果他们可以帮助我,谢谢你,因为你在其他帖子中删除了我的答案,而我正在完成其他人的其他信息,我找不到解决方案。< / p>
由于
答案 0 :(得分:0)
Cookie与发送它们的域绑定。您无法为其他域设置Cookie。
如果“网站B”(您使用cURL登录“网站A”的地方)为example.com
,“网站A”为not-example.com
,则{{1}设置的Cookie }适用于Set-Cookie
,不适用于example.com
。
没有为您自己的域设置Cookie的机制。
参见RFC 6265第5.3节(存储模型)第6部分:
如果domain-attribute为非空:
如果规范化的请求主机与域属性没有域匹配:
- 完全忽略cookie并中止这些步骤。
这实际上表示如果站点A尝试为站点B设置cookie,浏览器必须忽略cookie。