0

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

站点 A - 使用 php;

站点 B - 使用 Zend 框架。

我希望在站点 A 上有一个 iframe 到站点 B 的私有部分或重定向到站点 B,当我使用站点 A 上的表单进行 html 帖子时,我使用重定向并登录的凭据一切正常,我想要在 php.ini 中从服务器端更安全地执行此操作。当我使用 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>

感谢您的时间和帮助。

4

2 回答 2

2

“当我使用 php curl 发布时,用户没有在 iframe 中登录,我厌倦了重定向,但用户再次没有在站点 B 上登录。”

我的回答:将 Php-Curl 视为浏览器。并且您正在将脚本作为不同浏览器执行的浏览器。要使 iframe 身份验证正常工作,需要在浏览器中设置 cookie。当您从 PHP 脚本进行身份验证时,会在 PHP-curl 浏览器上设置 cookie。这两个浏览器都不共享 cookie。我不认为你可以让用户像这样登录。

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

我相信我必须设置它们,但我不知道如何设置?这个对吗?通过查看使用 cookie 的 curl 选项,您做对了。

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

顺便说一句,您可以尝试以下代码并检查 cookies%randNum%.txt 是否正在您的 cookies 文件夹中生成?顺便说一句,在执行之前,在与脚本相同的文件夹中创建一个 cookies 文件夹。只是为了确保您将所有 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);
?>
于 2012-06-20T00:54:31.660 回答
0

您是否创建了 cookies.txt 并允许 Web 服务器的用户对其进行写入?

http://siteb.com/account/login将需要启动会话(或写入 cookie)。

cURL 将处理其余部分。

于 2012-06-20T00:42:26.373 回答