我有一种情况,当页面加载时,我发送一些身份验证数据(在这种情况下是关联数组$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访问?
答案 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)