2012-06-29 92 views
7

我正嘗試使用cURL從同一域上的不同頁面登錄到PunBB論壇。cURL cookiejar行註釋掉#HttpOnly_?

登錄時,cURL被執行,其初始響應是論壇的「成功登錄」頁面。然而,當點擊該論壇中的任何鏈接時,沒有cookie被設置,因此我退出了。

經過一番調查,我的cookiejar文件提到了需要登錄的cookie。如果我手動創建這個cookie和它的值在我的瀏覽器中,我已成功登錄並且一切正常。所以存儲的cookie值是正確的。

然而,在cookiejar中包含我的cookie名稱/值的行卻被註釋掉了。

第一個問題:爲什麼? 秒:如何防止這種行爲?

這裏是我的cookiejar:

# 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 

這是我的電話捲曲:

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; 

回答

5

一行的#Httponly_前綴不是評論。這是一個神奇的字符串,告訴瀏覽器/客戶端,該cookie是一個httponly之一。 curl會理解並相應地處理它。

我不明白關於點擊事件的部分,因爲我沒有看到與curl-using程序相關或相關的部分。

+0

啊好吧!謝謝丹尼爾。似乎我完全誤解了哈希的含義。 您的評論關於不理解點擊部分。那麼,儘管cookie在cookiejar中被正確寫入,但它並未在瀏覽器中設置爲常規cookie。所以,最初的響應頁面告訴我,我記錄正確,但由於cookie沒有在那裏,我真的不是,當我點擊論壇中的任何鏈接(它會告訴我即時沒有登錄)變得非常明顯。 對此有何看法? – Amelia

+1

是的,curl是客戶端並獲取和使用cookies,但這並不意味着它會將其發送到瀏覽器,或者甚至可以將其發送給僅查看curl程序結果的瀏覽器。 –

+0

我明白了。 好的。所以我寫了一些小曲來抓取正確的cookie並讓php設置:)生活是美好的。 感謝您的幫助Daniel! – Amelia