11

cURL を使用して、同じドメインの別のページから PunBB フォーラムにログインしようとしています。

ログインすると、cURL が実行され、最初の応答はフォーラムの「ログイン成功」ページです。ただし、そのフォーラムのリンクをクリックしても Cookie が設定されず、ログアウトされます。

少し調査した後、cookiejar ファイルに、ログインに必要な Cookie が記載されています。この Cookie とその値をブラウザで手動で作成すると、ログインに成功し、すべて問題ありません。したがって、保存されている Cookie の値は正しいです。

ただし、cookiejar 内の Cookie の名前/値を含む行はコメントアウトされています。

最初の質問: なぜですか? 2番目:その動作を防ぐ方法は?

ここに私のクッキージャーがあります:

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www.example.com FALSE   /   FALSE   0   PHPSESSID   3d7oe6vt3blv3vs3ea94nljcs7
#HttpOnly_www.example.com   FALSE   /   FALSE   1340974408  forum_cookie_e19209 MnwyYWQ4OGViNDI2NjE5MWEwMGZiNGZkNDFmZDY5ZDZhYjM5OTA5NDVjfDEzNDA5NzQ0MDh8OTU0NTExOGZhNWNlNGY5OGMzZDk3MmE0NDlmMWRjNzM3ZjI1NzMxOA%3D%3D

そして、ここに私のcurl呼び出しがあります:

function forumLogin() {
    $loginFields = array('req_username' => $_REQUEST['username']
                        ,'req_password' => $_REQUEST['password']
                        ,'form_sent' => "1"
                    ); //and so on
    $login = getUrl('http://www.example.com/manager/forum/login.php', 'post', $loginFields);
   return $login;
}

function getUrl($url, $method='', $vars='') 
{
  $ch = curl_init();
  if ($method == 'post') {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
  }
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
  curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    $buffer = curl_exec($ch);
  curl_close($ch);
  return $buffer;
}

// successful login so reset fail count and update key values
if(isset($_SESSION['mgrValidated'])) {
    $sql = "update $dbase.`".$table_prefix."user_attributes` SET failedlogincount=0, logincount=logincount+1, lastlogin=thislogin, thislogin=".time().", sessionid='$currentsessionid' where internalKey=$internalKey";
    $rs = mysql_query($sql);
    var_dump( forumLogin() );
}
exit;
4

1 に答える 1

13

行の #Httponly_ プレフィックスはコメントではありません。これは、問題の Cookie がhttponlyであることをブラウザー/クライアントに伝える魔法の文字列です。curl はそれを理解し、それに応じて対処します。

それがcurlを使用するプログラムにどのように関連しているか、または関連しているかがわからないため、クリックに関する部分がわかりません。

于 2012-06-29T13:37:55.750 に答える