如何存储CURL提取的cookie,以便可以通过iFrame中加载的页面访问它

时间:2011-03-16 17:56:51

标签: php session codeigniter cookies curl

我有一种情况,当页面加载时,我发送一些身份验证数据(在这种情况下是关联数组$data),这是由另一个域上的脚本验证的。代码如下:

$cookie_path = 'cookies.txt';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com/verify');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_path);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    $result = curl_exec($ch);

该网站然后设置一个会话(在这种情况下,我使用的是codeigniter框架,会话设置如下:$this->session->set_userdata('logged_in', true);

然而,当我在iframe中加载外部网站时,它似乎无法检测到会话已设置并重定向到登录页面。

如何确保我的会话cookie正确发送并且可以通过iframe访问?

2 个答案:

答案 0 :(得分:2)

您的curl脚本正在运行服务器端并存储第二个站点的cookie,但您的浏览器正在加载客户端中的第二个站点。您可以跨域共享Cookie。

如果您控制尝试创建会话的站点,您可以将会话ID传递给PHP脚本,然后动态生成iframe URL,包括会话ID作为查询字符串,例如:

http://www.brainbell.com/tutors/php/php_mysql/Encoding_the_session_ID_as_a_GET_variable.html

修改的 为了澄清一下,如果您控制第二个站点上的脚本,您可以修改它以将经过身份验证的会话的SESSIONID提供给您的CURL脚本,然后您生成cURL请求的PHP脚本可以合并到动态生成的iFrame src URL中。 / p>

答案 1 :(得分:0)

您可以通过以下方式设置Cookie:

http://php.net/manual/en/function.setcookie.php

但是,您无法为脚本域外的域设置Cookie。