【发布时间】:2010-12-10 03:41:14
【问题描述】:
我正在尝试设置一个 php 页面,该页面使用 cURL 访问第三方服务器以登录它们。现在我的代码确实成功登录到第三方服务器,但是由于 cURL 没有将 SESSION cookie 发送到用户,用户必须自己登录
如何让 cURL 将 cookie 转发给客户端。 谢谢
【问题讨论】:
我正在尝试设置一个 php 页面,该页面使用 cURL 访问第三方服务器以登录它们。现在我的代码确实成功登录到第三方服务器,但是由于 cURL 没有将 SESSION cookie 发送到用户,用户必须自己登录
如何让 cURL 将 cookie 转发给客户端。 谢谢
【问题讨论】:
查看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!
【讨论】:
无论如何,用户的浏览器很可能不允许您为另一个域设置 cookie。
您可以在您的 PHP 代码中登录并获取(例如)Hotmail 的会话 cookie。但是您将无法将该会话传递给用户(因此他/她也会登录)。
这是因为许多浏览器和配置拒绝设置第 3 方 cookie。
【讨论】:
您可以在用户的浏览器中设置 cookie,而无需将他重定向到服务器。您需要做的是让用户在其中使用 curl 代码访问您的 php 页面。然后您可以获取他的帖子数据并将此数据发送到服务器。但是不要让服务器重定向你。 将选项设置为 CURLOPT_FOLLOWLOCATION 为 false 并将 CURLOPT_HEADER 设置为 true 现在抓取标题并提取 cookie 和位置标题,然后将它们传递为 客户端浏览器的标头,例如 header("Location: ...) 和 header("Set-Cookie: ....)。您也可以通过提取它们来发送其他标题。以下【帖子】html page not getting cookies through libcurl也有类似情况
【讨论】: