2011-05-07 96 views
0

創建類似FTP會話我正在尋找一種方法來跟蹤一個HTTP 1.1的連接跨請求保持活着,爲了得到一個類似FTP會話。 這個想法應該是在第一次請求時進行身份驗證,然後在套接字仍然打開時保持身份驗證有效(使用HTTP 1.1保持活動功能)。使用保持活動連接(HTTP 1.1)在PHP

我一直在尋找這樣的解決方案,直到這裏沒有太多的成功。

我正在尋找的信息,如:

  • 是某處在PHP可從Apache插座ID?
  • 有沒有一個模塊允許添加信息到HTTP 1.1連接(可以使用PHP的東西)?

任何其他的想法?

回答

1

你不能那樣做。

我不認爲阿帕奇(或任何Web服務器,對於這個問題)公開插座ID到一個PHP腳本。但可能使用$_SERVER['REMOTE_ADDR']$_SERVER['REMOTE_PORT']唯一標識連接,因爲同一客戶端不能同時從同一個臨時端口向同一服務器發起兩個連接。

但是,即使你做到這一點,保持活動的會話可能不會停留足夠長的時間允許有意義的人機交互象FTP一樣。大多數保持活動會話會在5-15秒後自動終止,具體取決於您的Web服務器的配置。你也許可以調整這個,但是讓連接長時間保持連接是一個非常糟糕的想法,尤其是當使用Apache和mod_php時,因爲持久連接可能會犧牲其他用戶獨佔服務器資源。此外,計算機和路由器傾向於重複使用臨時端口,因此不能保證您正在與同一用戶通話。考慮到人們每天使用的所有代理和反向代理時,情況會變得更加複雜。

只需使用會話和/或cookie。他們總是工作。

+0

謝謝,我已經想到到遠程地址+端口,但我想,以避免會話劫持,所以上述兩個都不夠可靠,爲基於Cookie(或無cookie)會話同樣的事情。我也不想使用SSL,因爲我想全速,我的數據已經被加密了...所以我還在尋找... – picrap 2011-05-08 06:59:52

0

如果你不限於apache,並且可以簡單地運行php腳本,我認爲你可以做到。

http://php.net/manual/en/book.sockets.php

PHP允許你打開一個特定的端口,並具有低層次閱讀寫入。這樣你可以編寫任何現有的或你自己的協議。

對於這種特殊情況下,你可以有一個非HTTP端口上運行Apache,並聽取來自定製的PHP腳本的HTTP端口。然後您應該認證連接請求;爲用戶附加一個自定義標題(稱爲myauth),然後將請求轉發給apache。確保在讀取原始http請求時過濾掉myauth頭。