php - 如何在 php 中维护 cURL 中的 session ?

标签 php curl

我们如何在 cURL 中维护 session ?

我有一个代码可以发送网站的登录详细信息并成功登录 我需要在网站上维护 session 才能继续。

这是我用来使用 cURL 登录网站的代码

  <?php  
        $socket = curl_init();
        curl_setopt($socket, CURLOPT_URL, "http://www.XXXXXXX.com");
    curl_setopt($socket, CURLOPT_REFERER, "http://www.XXXXXXX.com");
    curl_setopt($socket, CURLOPT_POST, true);
    curl_setopt($socket, CURLOPT_USERAGENT, $agent);
    curl_setopt($socket, CURLOPT_POSTFIELDS, "form_logusername=XXXXX&form_logpassword=XXXXX");
    curl_setopt($socket, CURLOPT_COOKIESESSION, true);
    curl_setopt($socket, CURLOPT_COOKIEJAR, "cookies.txt");
    curl_setopt($socket, CURLOPT_COOKIEFILE, "cookies.txt");
    $data = curl_exec($socket);
    curl_close($socket); 
   ?>

最佳答案

这是我找到的最好的方法 link :

下面的文字是 blogpost 内容的“混合”版本:

 $useragent = $_SERVER['HTTP_USER_AGENT'];
 $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';

session_write_close();

$ch = curl_init();
$ch = curl_init($rssFeedLink); 
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT, $useragent);
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );

$response = curl_exec($ch); 
curl_close($ch); 

session_write_close() 有什么作用?它结束当前 session 并存储 session 数据。显然,PHP 不喜欢多个脚本同时处理 session ,因此它锁定了 session 。放置 session_write_close 可确保存储当前 session ,以便您可以检索并使用它。

如果您不使用 session_write_close(),将生成一个新的 session ID,而不是使用当前 session ID。

此外,PHPSESSID 应替换为 session 变量的名称。根据OWSAP recommandations它应该是更一般的东西,比如 anId

有时您需要在帖子中发送用户代理,因此我包含了 CURLOPT_USERAGENT 参数。

关于php - 如何在 php 中维护 cURL 中的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424714/

相关文章:

php - "Method brand does not exist."

php - PHP 中 MySQL 的 UTF-8 字符集问题

php - 格式化存储在 phpmyadmin 中的日期

java - 如何使用java删除或隐藏Http响应错误

c - 对于curl程序,获取对 'clock_gettime'错误的 undefined reference

java - 自动化工作 : Importing Powerpoint Bullet Text into an Excel Sheet

php - 现在日期时间 PHP mysql(+ PDO 变体)

php - 使用 PHPcurl 和参数发布 json 数据

regex - Grep 排除 curl 主体的注释 &lt;!-- --> 之间的匹配出现次数

php - curl上传多个php ://memory files?