2016-09-22 74 views
0

我有這樣的代碼的Cookie問題(PHP) - 在捲曲頭

<?php 
    $mLoginUrl = "https://www.test.com/login"; 
    $mCookieFile = dirname(__FILE__).'/tmpCookies/cookie'.rand().'.txt'; 

    define('USER_AGENT', 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36'); 
    define('COOKIE_FILE', $mCookieFile); 
    define('LOGIN_FORM_URL', $mLoginUrl); 
    define('LOGIN_ACTION_URL', $mLoginUrl); 

    $postValues = array(
     'user[email]' => "[email protected]", 
     'user[password]' => "mypassword" 
    ); 

    $headers = Array(
       "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", 
       "Cache-Control: max-age=0", 
       "Connection: keep-alive", 
       "Keep-Alive: 300", 
       "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
       "Accept-Language: en-us,en;q=0.5", 
       "Pragma: " 
      ); 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_VERBOSE, TRUE); 
    curl_setopt($curl, CURLOPT_URL, LOGIN_ACTION_URL); 
    curl_setopt($curl, CURLOPT_POST, TRUE); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues)); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,FALSE); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($curl, CURLOPT_COOKIEJAR, COOKIE_FILE); 
    curl_setopt($curl, CURLOPT_COOKIEFILE, COOKIE_FILE); 
    curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($curl, CURLOPT_REFERER, LOGIN_FORM_URL); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($curl, CURLOPT_HTTPHEADER,$headers) ; 
    curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE); 
    $res = curl_exec($curl); 
    $info = curl_getinfo($curl); 
    print_r($info['request_header']); 
    exit; 
?> 

這工作得很好我的本地計算機上和我的服務器和節目之一下面的輸出未連接的Cookie信息

GET/HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36 
Host: www.test.com 
Referer: https://www.test.com/login 
Cookie: _property_session=WjROWEYvTHNYaE5Zb29jVk04WGM0Z3FybmhmY1ZIeVdBc2N6d2N3UmViaXlZdFNhR1dSbUN4QVh6aFFSRjFPYktybmdnRGlXNG0yWWcremEzcklKTnE1ZE1lTTM0eUQrSG90SVhRRzhvYW5rWmFQTVhBMjVCWjBtb1FSc0RrTEh2RjhHSFI3aHkwa3U4N3Y3czJhTzJuN2ZGbWRRN0Nra2Z6OTR4aHhvVG42bVVRS3kwTExUL1hMN2JoZ0xRd2g3VVdIMC81cGhLQzJjOTJvc2RYajIwakE0VjZqRnhTeHBleFltTGF4Z3hpUGJEb0E3Nlo2S3BwMElqNnVkaWhDVS0tc0pCRlozSVE5bXRHQXlHWE1IbTl4UT09--67cf6e056b84b4cae4d275507f544927802eb78d 
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Cache-Control: max-age=0 
Connection: keep-aliveKeep-Alive: 300 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Accept-Language: en-us,en;q=0.5 

這意味着cookie已創建並附加在CURL的標題中(正如我們可以在上面的CURL頭文件中看到的一樣).Cookie文件也在所提及的位置創建。

但在我的服務器代碼不按預期工作之一,並給出了下面的輸出

POST /users/sign_in? HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36 Host: www.test.com Referer: https://www.test.com/login Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Cache-Control: max-age=0 Connection: keep-alive Keep-Alive: 300 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Accept-Language: en-us,en;q=0.5 Content-Length: 76 Content-Type: application/x-www-form-urlencoded 

意味着cookie信息不捲曲頭連接。我已經檢查過,在這個(有問題的)服務器中也創建了cookie文件,並且有cookie內容,但cookie內容不包含在CURL頭文件中。提到的臨時cookie目錄對所有用戶具有完整的權限/許可(777)。

在有問題的服務器上,PHP版本是5.4.19,CURL版本是7.19.7。

如果有人能幫忙嗎?我嘗試了所有在互聯網上找到的解決方案。

在此先感謝。

+0

通過提及CatalinB建議的靜態文件名稱我能夠在標頭中獲取Cookie信息,但仍然無法登錄到其他網站。結果雖然有一點點差異。在開始時有** POST/login?**而不是** GET **。 這也可以在我的主要問題中指出,一個是有GET和其他有POST。爲什麼這樣呢?任何幫助?請 –

回答

0

感謝所有您的幫助。我解決了問題。問題是open_basedir路徑。我在解決問題的服務器上將此設置爲「無」。

0

$mCookieFile = dirname(__FILE__).'/tmpCookies/cookie'.rand().'.txt';

刪除蘭特()...是一個靜態文件

+0

謝謝。有效。我的意思是現在提到靜態文件名後附上Cookie信息,但仍然無法登錄到其他網站。結果雖然有一點點差異。在開始時有** POST/login?**而不是** GET **。 這也可以在我的主要問題中指出,一個是有GET和其他有POST。爲什麼這樣呢?任何幫助?請 –

+0

您的代碼發出請求並嘗試通過Chrome登錄並在Chrome中查看 - 檢查 - >網絡發送什麼參數 – CatalinB

+0

我已將Chrome-> Inspect-> Network上傳到以下圖片。看看你能否幫忙。爲什麼一個是GET而另一個是POST如果代碼相同? GET正在工作http://imgur.com/a/Tfeka –