【问题标题】:PHP and cURL cookiesPHP 和 cURL cookie
【发布时间】:2010-12-10 03:41:14
【问题描述】:

我正在尝试设置一个 php 页面,该页面使用 cURL 访问第三方服务器以登录它们。现在我的代码确实成功登录到第三方服务器,但是由于 cURL 没有将 SESSION cookie 发送到用户,用户必须自己登录

如何让 cURL 将 cookie 转发给客户端。 谢谢

【问题讨论】:

    标签: php cookies curl


    【解决方案1】:

    查看documentation 了解以下 cURL 选项:

    CURLOPT_COOKIE
    CURLOPT_COOKIEFILE
    CURLOPT_COOKIEJAR
    

    编辑

    在更彻底地阅读了您的问题之后,恐怕要告诉您,除非您将客户端重定向到您尝试授权它们的站点,否则无法将 cookie 写入客户端浏览器。浏览器 cookie 在称为 Same Origin Policy 的安全模型上运行。这基本上意味着域只能为其 OWN 域发出 cookie,而不能为其他域发出 cookie。在您的特定情况下:

    client --CONTACTS--> foo.com --cURL-LOGIN--> bar.com
    bar.com --bar.com-COOKIE--> foo.com --foo.com-COOKIE--> client
    client --foo.com-COOKIE--> bar.com (Will not work)
    

    基本上,foo.com 不能在客户端上为 bar.com 创建 cookie!

    【讨论】:

    • 对于子域,在从 cURL 捕获 cookie 后,使用我建议的选项,您应该使用域为:“.domain.com”的 set_cookie,其中域是最长的公共子域。跨度>
    【解决方案2】:

    无论如何,用户的浏览器很可能不允许您为另一个域设置 cookie。

    您可以在您的 PHP 代码中登录并获取(例如)Hotmail 的会话 cookie。但是您将无法将该会话传递给用户(因此他/她也会登录)。

    这是因为许多浏览器和配置拒绝设置第 3 方 cookie。

    【讨论】:

    • 嗯,它在同一个子域中 服务器1:foo.bar.com 服务器2:sub.domain.bar.com
    【解决方案3】:

    您可以在用户的​​浏览器中设置 cookie,而无需将他重定向到服务器。您需要做的是让用户在其中使用 curl 代码访问您的 php 页面。然后您可以获取他的帖子数据并将此数据发送到服务器。但是不要让服务器重定向你。 将选项设置为 CURLOPT_FOLLOWLOCATION 为 false 并将 CURLOPT_HEADER 设置为 true 现在抓取标题并提取 cookie 和位置标题,然后将它们传递为 客户端浏览器的标头,例如 header("Location: ...) 和 header("Set-Cookie: ....)。您也可以通过提取它们来发送其他标题。以下【帖子】html page not getting cookies through libcurl也有类似情况

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 2011-12-19
      • 2011-10-08
      • 2011-11-23
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多