0

私は 2 つのサイト A と B を持っています。サイト A からサイト B にログオンする確認済みのユーザーを取得できるようにしたいと考えています。

サイト A - PHP を使用。

サイト B - Zend Framework を使用します。

サイト A の iframe をサイト B のプライベート パーツにするか、サイト A のフォームから HTML 投稿を行うときに、リダイレクトされてログインした資格情報を使用してサイト B にリダイレクトしたいのですが、すべてが機能します。 PHPでサーバー側からより安全に行うため。php curl を使用して投稿すると、ユーザーは iframe 内にログインしません。リダイレクトに疲れましたが、ユーザーはサイト B にログインしていません。

HTML フォームが機能し、php curl が機能しない理由がわかりません。curl を使用して別のものを送信する必要があるのでしょうか、それとも Zend に問題がありますか?

----- さらにグーグルで調べた後、問題を Cookie に絞り込みました。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

「phpcurlを使用して投稿すると、ユーザーがiframe内にログインしなくなり、リダイレクトに疲れましたが、ユーザーはサイトBにログインしていません。」

私の答え:Php-Curlをブロワーと考えてください。また、スクリプトを別のブラウザとして実行しているブラウザ。iframe認証を機能させるには、ブラウザにCookieを設定する必要があります。PHPスクリプトから認証する場合、CookieはPHP-curlブラウザに設定されます。これらのブラウザは両方とも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フォルダーに生成されているかどうかを確認できますか?ところで、実行する前に、スクリプトと同じフォルダに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);
?>
于 2012-06-20T00:54:31.660 に答える
0

Cookies.txtを作成し、Webサーバーのユーザーがそれに書き込むことを許可しましたか?

http://siteb.com/account/loginは、セッションを開始する(またはCookieを書き込む)必要があります。

残りはcURLが処理します。

于 2012-06-20T00:42:26.373 に答える