0

現在、ユーザーがユーザー名とパスワードを入力する必要があるスクリプトに取り組んでいます。次に、ユーザーがログインすると、スクリプトはユーザーのユーザー名がデータベースに登録されているかどうかを確認します。その場合、ユーザーは私の外部 Web サイト (cURL を使用) にログインし、そうでない場合、ユーザーはデータベースにアクセスできない別の Web サイトにログインします。

if($count==1){
    $curl = curl_init('http://www.myownwebsite.com/');
    curl_setopt ($curl, CURLOPT_POSTFIELDS, "gebruikersnaam=$myusername&wachtwoord=$mypassword");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($curl);
}
else {
    $curl = curl_init('http://www.differentwebsite.com/');
    curl_setopt ($curl, CURLOPT_POSTFIELDS, "username=$myusername&password=$mypassword");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($curl);
}

ご覧のとおり、スクリプトは行数を count 変数に格納し、クエリの結果が 1 行の場合は自分のサイトにログインし、そうでない場合は他のサイトにログインします。ユーザー名とパスワードのチェックは、ユーザーがログインする実際の Web サイトで行われます。

今私の問題は、「場所をたどる」、またはいわばそれが欲しいということです。スクリプトは、現在のように、リダイレクト (?) しますhttp://www.myownwebsite.com/checklogin.php(checklogin.php は、cURL を使用しているスクリプトです)。

followlocation cURL関数を使用してこれを解決しようとしましたが、それを行うと警告が表示されます:

警告: curl_setopt(): safe_mode が有効な場合、または open_basedir が ----- に設定されている場合、CURLOPT_FOLLOWLOCATION をアクティブにできません

phpinfo(); を使用して php.ini を確認しました。関数とセーフモードがオフになっている場合、open_basedir には値がないため、これは問題ではないと思います。他に考えられる解決策をいくつか調べましたが、これまでのところ、この問題の解決に役立つものはありませんでした。

ご不明な点がございましたら、お気軽にお尋ねください。

4

1 に答える 1

2

サーバーのログインページに POST リクエストを送信して、ユーザーをログインさせることはできません。何が起こるかは、ユーザーではなくサーバーにログインすることです。

また、PHP で POST データを使用してユーザーをリダイレクトすることはできません。できることは、ページの読み込み時に JavaScript を介して送信される隠しフィールドと をmethod="POST"含むフォームを作成することだけです。出力できるページの簡単な例を次に示します。action="http://www.differentwebsite.com/"usernamepassword

<html>
<head>
<script type="text/javascript">
function submit_form()
{
    document.myform.submit();
}
</script>
</head>
<body onload="submit_form();">
    <form method="POST" name="myform" action="http://www.google.com/">
        <input type="hidden" name="username" value="someusername"/>
        <input type="hidden" name="password" value="somepassword"/>
    </form>
</body>
</html>

ユーザーがリダイレクトされる理由については、スキップしたことが原因です。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

そのため、出力はユーザーに直接送信されます。

于 2013-03-13T09:01:51.703 に答える