2013-08-23 42 views
1

我想寫一個「自動登錄」腳本,它使用curl登錄到特定站點,然後回顯響應,以便用戶可以「繞過」登錄。 (例如,授予一次性登錄等)使用cURL和迴應響應與cookie登錄

顯然,使用以下方法,cookie存儲在服務器上,而不是客戶端上的cookie.txt中。

我試過設置$ _COOKIE,但這樣做不起作用,因爲自動登錄腳本和要登錄的服務的URL(實際上是子域)是不同的。

登錄工作正常。您看到屏幕就像您已經登錄一樣,但點擊任何鏈接都需要您再次登錄。

任何想法?由於

我用自動登錄的代碼:

<?php 
$username="[email protected]"; 
$password="password"; 
$url="http://sub.domain-to-login.com/index.php/sessions/login"; 
$cookie="cookie.txt"; 

$postdata = "email=".$username."&password=".$password.'&btn_login=Login'; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
curl_close($ch); 
echo $result; 
?> 
+0

這是非常糟糕的做法。您將爲所有用戶使用** SAME ** cookie.txt。實際上,您允許第2,3,4等...用戶簡單地接管第1個用戶的會話。因爲你永遠不會發送登錄cookie,所以你已經提交給你的用戶,如果他們直接打到服務,他們將不會登錄,因爲他們從未收到cookie。 –

+0

好的,然後我會在會話中存儲一個隨機字符串並相應地命名cookie.txt。感謝你們,我沒有想到這一點。 – nic

回答

0

我猜你需要從http://sub.domain-to-login.com/index.php/stuff替換所有鏈接(在$結果)喜歡的東西http://mysite.com?url=http://sub.domain-to-login.com/index.php/stuff,然後使用curl下載本網站再次。 你只是不能爲不同的網站設置cookie。

+0

糟透了,但那可能是我必須要做的。非常感謝您的快速回復。 對於將來的讀者:如果您像我一樣複雜的鏈接,請不要忘記在將鏈接放入查詢字符串之前對鏈接進行網址編碼。 – nic