【问题标题】:PHP: Stuffing CURL's Cookiejar into a $Session varaible?PHP:将 CURL Cookie Jar 填充到 $Session 变量中?
【发布时间】:2014-04-02 03:51:36
【问题描述】:

据我了解,curl 使用 cookiefile 参数读取 cookie,并在 curl 会话完成后使用 cookiejar 保存它们。

使用它的典型示例表明必须使用文件,但我不想手动清理这些剩余位。 例如,如果我使用 tempnam 将 cookiejar 设置为一个文件,我最终会不可避免地得到一个充满小 cookiejar 的目录,我需要清理它们。

如果用户正确注销,我当然可以删除这个临时文件,但我指望大多数用户只是关闭浏览器窗口并且会话(最终)到期,让我无法删除cookie jar 自动生成。

到目前为止,我最好的想法是将 cookiejar 放入 temp 文件夹,将其读入会话变量,然后在每次使用 curl 时删除 cookiejar 文件。

以前用户的实现是通过解析头信息来避免cookiejar,但是这个我想了解的有点多。

【问题讨论】:

    标签: php session cookies curl


    【解决方案1】:

    决定采用临时文件环绕方法。假设你的 curl 处理程序被命名为 $c:

    //Put down the cookieJar
    $cookieJar = tempnam(sys_get_temp_dir(),"cookie-");
    if (isset($_SESSION['c_Cookies'])) file_put_contents($cookieJar,   $_SESSION['c_Cookies']);
    
    curl_setopt($c, CURLOPT_COOKIEJAR, $cookieJar);
    curl_setopt($c, CURLOPT_COOKIEFILE, $cookieJar);
    

    在脚本的最后:

    //Always destroy curl, just in case...
    curl_close ($c);
    unset($c);
    //And pickup the cookieJar
    $_SESSION['c_Cookies'] = file_get_contents($cookieJar);
    unlink($cookieJar);
    

    这当然假设系统临时目录可由运行 php 的任何人写入。它应该确保始终在脚本末尾删除 cookiejar,只要所述脚本不会过早终止。

    【讨论】:

      【解决方案2】:

      而不是解析它们,您可以只在您的客户端和其他服务器之间传递标头。请记住为 set-cookie 案例中的“domain=[^;]+”部分添加正则表达式替换。

      【讨论】:

      • 这是一个有趣的想法,只要反射服务器不关心从我的服务器传递的外部 cookie。我试试看!
      猜你喜欢
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2014-11-07
      • 2013-07-04
      • 2013-11-23
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多