2012-03-16 88 views
3

我運行一個計算機實驗室爲年級學生(3-14喲),並希望創建一個由多個iframe組成的桌面/儀表板頁面,每個頁面指向不同的外部網站 (爲此我們創建了個人帳戶每個孩子);當一個孩子登錄(到儀表板)時,腳本會將她登錄到這些網站,所以她不必這樣做。一次登錄多個網站的腳本。嘗試CURL和PHP。

我有1個服務器和20個工作站,我將它們分別稱爲「myserver」和「mybrowser」。所有這些都在相同的路由器(動態IP)之後。

一個孩子得到一個 'mybrowser' 的工作站上,激發了Firefox和運行desktop.php(在 'MYSERVER' 託管),並得到一個登錄屏幕(爲 'MYSERVER')

'mybrowser' --- http --->'myserver'

登錄後,'myserver'將檢索存儲在其數據庫中的一組用戶名和密碼,並運行CURL腳本將其發送到'外部Web服務器'。

'mybrowser' --- HTTP ---> 'MYSERVER' ---捲曲---> '外部Web服務器'

成功,好了,我想。 變成CURL,運行'myserver',登錄'myserver'而不是'mybrowser'。 刷新後,iframe中的會話仍未登錄。現在我知道了。

然後我想從'myserver'捕獲cookie並將其設置爲'mybrowser',以便'mybrowser'現在可以作爲登錄用戶瀏覽(在iframe內) 。畢竟,我們(所有的「mybrowsers」)都與「myserver」位於相同的路由器後面,因此IP地址相同。

換句話說,我只需要'myserver'將用戶同時登錄到多個外部網站,並且一旦完成將控制權交還給個人用戶的瀏覽器。

我希望答案不會訴諸於使用CURL來顯示和控制整個會話的外部網站,除了會導致一些其他粘性問題的拖動。

由於安全問題,我得到了不允許的細微差別,但是如果所有'mybrowsers'和'myserver'都在同一個路由器後面呢?假設有一種方法可以將登錄cookie從'myserver'複製到'mybrowsers','外部Web服務器'是否知道請求來自不同的機器?

可以這樣做嗎? 謝謝。

+1

你的各種服務使用哪些認證機制?基本認證或特定的登錄頁面?這讓我覺得,正確的解決方案將需要每個瀏覽器的Javascript。 – Purpletoucan 2012-03-16 09:48:53

+0

如果您嘗試使用從myserver啓動的請求自己登錄mybrowser工作站,則簡短答案爲「否」。漫長的回答是「是的,但它會需要這麼多的麻煩,這是不值得花費的」。這是因爲HTTP auth和cookie的範圍僅限於一臺主機,其缺點是您必須構建一個在myserver上運行的完整代理,或者在所有主機文件工作站 - 您需要簡單地將myserver的身份標識爲所有這些外部站點的工作站。 – DaveRandom 2012-03-16 10:06:05

回答

0

您面臨的問題與cookie的安全原則有關。例如,您無法爲其他網域設置Cookie,這意味着myserver無法爲facebook.com設置Cookie。

你可以設置你的服務器運行一個HTTP代理,並使其通過你的服務器運行所有的查詢並做一些URL轉換(例如facebook.com => facebook.myserver),然後作爲回報,你可以爲客戶端設置cookie(因爲您在facebook.myserver上運行),然後翻譯您從客戶端收到的cookies並將它們提供給第三方網站。

非透明代理,你可以用開始的一個例子:http://www.phpmyproxy.com/

透明代理(在哪些URL保持「正確」 /翻譯)可能是值得考慮了。 Squid是一個非常受歡迎的。但是,不能說這很容易。

畢竟,您仍然需要爲myserver構建一個本地腳本來處理登錄過程,但至少有一個代理應該使這一切成爲可能。

如果您在登錄過程本身有任何發言權,可能會更容易將所有服務設置爲使用OpenID或類似的登錄服務,而StackOverflow及其姊妹站點是關於在多個站點上輕鬆登錄的主要示例取得成就。