Php curl Login Cookie 如何设置 Cookie



我有两个站点 A 和 B,我希望能够让站点 A 中的经过验证的用户登录到站点 B,

站点 A - 使用 php;

站点 B - 使用 Zend Framework。

我想在站点 A 上有一个 iframe 到站点 B 的私有部分或重定向到站点 B当我使用凭据从站点 A 上的表单进行 HTML 发布时,我会被重定向并登录一切正常,我想在 PHP 中从服务器端更安全地执行此操作。当我使用 PHP curl 发布时,用户没有在 iframe 中登录,我厌倦了重定向,但用户再次没有在站点 B 上登录。

我不知道为什么html表单有效而php curl不起作用? 我应该使用 curl 发送其他东西,还是 Zend 有问题?

-----好的,经过更多的谷歌搜索,我已经将问题缩小到cookie,我相信我必须设置它们,但我不知道怎么做? 这是对的吗? 我将如何在 PHP 中设置它们? 还是将设置cookie的标头传递给浏览器并转发到站点B? 如果是这样,我该怎么做?

这是我到目前为止的代码。

<?php
$data = array(
 'useremail' => 'someemail',
 'password' => 'somepassword'
 );
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://siteb.com/account/login");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
?>    
<html>
 <body>
 <iframe src="http://SiteB.com/account/login" width="950" height="700"></iframe>
 <form action="http://SiteB.com/account/login" method="post">
 email: <input type="text" name="useremail" value="useremail" /><br />
 password: <input type="text" name="password" value="somepassword" /><br />
 <input type="submit" value="Submit" />
 </form>
</body>
</html>

感谢您的时间和帮助。

"当我使用 PHP curl 发帖时,用户没有在 iframe 中登录,我厌倦了重定向,但用户再次没有登录站点 B。"

我的ans:把Php-Curl想象成一个浏览器。以及您正在以其他浏览器执行脚本的浏览器。要使 iframe 身份验证正常工作,需要在浏览器中设置 Cookie。当你从PHP脚本进行身份验证时,cookie被设置在PHP-curl浏览器上。这两个浏览器都不共享cookie。 我认为你不能让用户像这样登录。

您使用的是 Windows 服务器还是 Linux 服务器?

我相信我必须设置它们,但我不知道怎么设置? 这是对的吗?通过查看使用 cookie 的卷曲选项,您做对了。

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);

顺便说一句,您可以尝试以下代码并检查 cookie%randNum%.txt 是否正在您的 cookie 文件夹中生成吗?顺便说一句,在执行之前,在与脚本相同的文件夹中创建一个cookie文件夹。只是为了确保您将所有 cookie 放在一个文件夹中,而不是分布在脚本文件中。

    <?
$mypath = getcwd();
            $mypath = preg_replace('/\\/', '/', $mypath);
            $rand = rand(1, 15000);
            $cookie_file_path = "$mypath/cookies/cookie$rand.txt";
    $data = array(
     'useremail' => 'someemail',
     'password' => 'somepassword'
     );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://siteb.com/account/login");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);   // Cookie management.
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
    $output = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);
?>

您是否创建了 cookie.txt并允许 Web 服务器的用户写入它?

http://siteb.com/account/login 需要启动会话(或编写 Cookie)。

cURL 将处理其余的工作。

最新更新