未找到PHP cURL会话/会话可能已过期

时间:2013-11-12 21:42:10

标签: php session cookies curl

所以我使用cURL从第1页获取数据,从中获取信息并将其存储在数组中。下一步是加载下一页,我是​​通过使用相同的cookiejar和cookiefile创建一个新的cURL来实现的。我正确看到第1页,但第2页显示:未找到会话。会话可能已过期。通过查看标题信息,我在第1页看到它设置了cookie WCOOKIE = rd244o00000000000000000000ffff912c10f5o80。
在第2页的标题中,它设置了cookie WCOOKIE = rd244o00000000000000000000ffff912c10f6o80。
所以这就是为什么它认为会话已过期,它不加载cookie但页面试图重写它。所以我的问题是:我必须做些什么才能让第2页加载第1页设置的cookie,而不是尝试设置新的cookie?

其他信息: 这两个页面的加载都发生在一个文件(1.php)中,因为我需要将数据存储在一个数组中,并且您需要第1页的cookie才能请求第2页。

两个页面都设置为使用标题:

$headers[] = "Accept: */*";  
$headers[] = "Connection: Keep-Alive";  
$headers[] = "Content-type: application/x-www-form-urlencoded;charset=UTF-8";  

正在加载第1页:

$cSession = curl_init(); 
$tmpfname = dirname(__FILE__).'/cookie.txt';
curl_setopt($cSession, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($cSession, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($cSession, CURLOPT_HTTPHEADER,  $headers);
curl_setopt ($cSession, CURLOPT_COOKIESESSION, TRUE);

正在加载第2页:

$ch = curl_init ();
$tmpfname = dirname(__FILE__).'/cookie.txt';
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname);
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname);
curl_setopt($ch, CURLOPT_HTTPHEADER,  $headers);
curl_setopt ($ch, CURLOPT_COOKIESESSION, TRUE);  

这不是所有设置,但我猜我必须更改这些行中的内容,如果需要更多信息,请告诉我,我会发布它们。
非常感谢:)

1 个答案:

答案 0 :(得分:1)

好的,我终于通过这篇文章how to get the cookies from a php curl into a variable修复了它。我在这里发布它给其他有同样问题的人 首先,我在请求1中启用了CURLOPT_HEADER。然后我使用此代码获取cookie:

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $result, $m);
parse_str($m[1], $cookies);
$cookie = $cookies['NAMEOFCOOKIEUNEEDHERE']; 

然后,我可以使用以下命令在请求2中传递此cookie:

curl_setopt($ch, CURLOPT_COOKIE, 'NAMEOFCOOKIEUNEEDHERE='.$cookie);

希望这可以帮助任何人