如何在没有cookiejar

时间:2018-04-18 11:29:03

标签: php curl cookies libcurl

我在负载均衡器下有多个应用程序节点,这使得我将cookie保存在文件中是有问题的,因为它可能保存在一个节点上,但是下一个请求可能指向文件不存在的另一个节点。

这是我用来执行请求的代码,它可以在单个节点上正常工作,但不能在多个节点上工作:

 $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $endpoint);
    curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    if ($this->proxy) {
        curl_setopt($ch, CURLOPT_PROXY, $this->proxy);
    }
    if (!is_null($headers)) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $this->settingsPath . $this->username . '-cookies.dat');
    curl_setopt($ch, CURLOPT_COOKIEJAR, $this->settingsPath . $this->username . '-cookies.dat');

    if ($post) {
        curl_setopt($ch, CURLOPT_POST, count($post));
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
    }

    $resp = curl_exec($ch);

有没有其他方法可以直接获取“Set-Cookie”标题,将它们保存到会话中并重复使用它们而不是使用 COOKIEJAR COOKIEFILE ? 我知道有 CURLOPT_COOKIE ,但我的响应标题似乎有多个“Set-Cookie”引用,我不知道如何格式化它们以在 CURLOPT_COOKIE 中使用。

或者至少有一种方法可以将 CURLOPT_COOKIEJAR 存储在一个集中存储服务器中的cookie文件,并从那里读回来,我将如何继续这样做?

提前致谢。

1 个答案:

答案 0 :(得分:1)

从数据库中存储/加载Cookie。您可以使用浏览器客户端的cookie会话ID作为db id(也就是您从session_id()获得的内容)。另外,不要对cookie位置进行硬编码,这会导致问题(当2个人同时使用相同的硬编码cookie位置加载同一页面时会发生什么?或者如果你在只读文件系统上会发生什么?没有写访问权限?),只需使用tmpfile。