2013-01-06 95 views
1

我有以下代碼:的file_get_contents和瀏覽器會話

$homepage = file_get_contents("https://example.com/specific_page"); 
echo $homepage; 

瀏覽器已經有我需要訪問,所以如果我打開新的標籤頁的網址,頁面才能正確顯示在網站的會話加載。

問題是,PHP腳本,重定向到「你沒有登錄」頁面。請注意,即使在重新啓動瀏覽器後,該url仍然可用。

任何想法如何獲得內容,而無需編寫登錄到網站的代碼?

+0

聽起來像xyz.com使用cookie來製作持久性數據。您的域(運行php腳本)根本無法訪問該會話。這是一項安全措施。 – Lix

+0

*「任何想法如何獲得內容,而無需編寫登錄到站點的代碼?」*如果站點要求您登錄,則不需要登錄 – 2013-01-06 23:21:18

+0

您還需要將會話憑證/令牌傳遞到頁面,例如,通過Cookie請求頭或URL上的某個查詢參數 - 取決於該網站如何處理會話。如果會話綁定到遠程IP,您可能無法劫持會話(您可以將其稱爲會話鎖定,瞭解其工作原理,同樣的原理適用於此)。 – hakre

回答

3

PHP運行服務器端,所以它有自己的會話處理,沒有鏈接到您的瀏覽器會話。您可以使用cURLoptions類似CURLOPT_COOKIEJAR來執行此操作。通過cURL,您可以通過PHP登錄並保留您請求的網站的PHP會話。你會在我鏈接的cURL文檔中找到一堆例子。

3

如果一個網站可以訪問任意外部網站上的數據,這將是一個巨大的安全問題。想象一下:file_get_contents('https://yourbank.com/all-your-details')

要做到這一點,唯一的方法是向用戶詢問他/她在外部網站上的登錄憑據並手動登錄。然而,這將是不可靠的,因爲認證過程可能會改變(並且要求某人輸入他/她的密碼是非常不禮貌的)。

這通常是Web服務API的用途,但如果沒有可供您感興趣的網站可用,那麼您會遇到困難。


如果你已經知道了網站的登錄憑據,那麼你可以硬編碼到他們使用Blauesocke所概述的方法的腳本,但如果細節是唯一的當前用戶這是不行的。

+0

似乎你是對的,因爲@hakre提到我需要通過憑據,然後請求具體頁面。我將需要就如何實現這一點做更多的研究。 – user1359575