你還是沒搞懂。仔細分析給你看:
代碼:
HTTP/1.1 200 OK
Date: Tue, 26 Jul 2005 19:40:40 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Accept-Ranges: bytes
X-Powered-By: PHP/4.2.2
Set-Cookie: cookiej2hbomb=deleted; expires=Mon, 26-Jul-04 19:40:39 GMT
Content-Length: 120
Connection: close
Content-Type: text/html; charset=Big5
資料已經送出
首先從第一行開始:
代碼:
HTTP/1.1 200 OK
Date: Tue, 26 Jul 2005 19:40:40 GMT
Server: Apache/2.0.40 (Red Hat Linux)
這三行訊息是 Apache 回應給你的,這個訊息表示:
1. 你的 HTTP Request 格式沒錯
2. URL 正確
3. 伺服器上的 PHP 有在正常運作
代碼:
Accept-Ranges: bytes
X-Powered-By: PHP/4.2.2
這兩行是 PHP 標準的輸出 Header,表示那個 PHP 程式有被呼叫起來執行。
代碼:
Set-Cookie: cookiej2hbomb=deleted; expires=Mon, 26-Jul-04 19:40:39 GMT
表示那隻 PHP 程式中有呼叫
setcookie 這個函示,伺服器希望使用者端設定 cookiej2hbomb 這個 Cookie。
代碼:
Content-Length: 120
Connection: close
表示 PHP 執行後有 120 byte 的輸出,且程式中沒有再呼叫其他和連線相關的函示。
代碼:
Content-Type: text/html; charset=Big5
這也是 PHP 的標準預設輸出,表示這個網頁是用 Big5 編碼。
代碼:
資料已經送出
這就是 PHP 程式的回應。
綜合以上分析,結論是:
1. 你的 Socket 有正確開啟連線,也有正確送出 POST 訊息。
2. 伺服器端的 PHP 程式有執行,並且回覆你一個『資料已經送出』的訊息。
到這裡為止,一切正常。
問題就是:你送出去的資料,到底有沒有被正常的處理,例如塞進資料庫,或是其他方式處理?這就要看伺服器系統是怎麼寫的了。
如果你 POST 一些資料過去,根本沒反應,可能的狀況有:
1. 伺服器端的程式寫太爛。可能是因為送過去的資料格式不對,或者需要先登入後才能 PO,卻沒有回應錯誤訊息。
2. 資料原本就沒有那麼快更新,可能需要後台管理員手動放上去之類的。
3. 你的 Client 端被 Proxy 住了,一直收到舊資料。
4. 你可能誤以為那個 post.php 會回應完整頁面,其實它就只會回應『資料已經送出』這句話,必須由網站上其他頁筐內的 Javascript 把你重導回另外一個頁面。
這種狀況其實單從你這一邊是不大可能 Debug 的。你最好是能弄到對方的程式碼,看看他到底搞什麼鬼。
至於 Session,舉個簡單的例子:假設你到醫院去看病,你到櫃台掛號,櫃台給你一個號碼牌要你去某某門診等。等到輪到你,你進去看診室把號碼牌給護士,他就用號碼牌檢索調出你的個人資料與病歷。看完病,再拿著號碼牌到藥局去領藥,把號碼牌遞給藥劑師,他就把藥給你。
在這個例子中,『號碼牌』就是你在醫院裡的身分證明。從你掛號開始你的資料就已經在醫院內部流通,你只需要用這個號碼牌,就足以證明你的身分。
Session 也是如此。PHPSESSID 就是你的號碼牌。以這個冰果是為例,你從登入,login.php 把你的暱稱、大頭照、發帖數等資料從資料庫裡調出來,然後發給你一個 PHPSESSID。之後你進入每個版面,viewforum.php 看到了你的 PHPSESSID,就知道這個連線是從 jackwong99 的電腦來的。進入發帖畫面,post.php 看到你的 PHPSESSID,就知道你發帖數不足 20,只能在新手區發問。
大致上就是這樣。所以你現在知道,你之前的認知到底是哪邊不正確了吧?
PHPSESSID 是一個 32 bytes 的隨機數字,通常會保存到你關閉瀏覽器為止。PHP 會自動幫你搞定 Session 的維護,因此不用擔心連線人數、垃圾清除等雜事。
最後,中文的 PHP 資源,請到
http://timteam.org/ 。不過那裡魔人居多,新手最好先充實一下自己。PHP 坊間中文書籍多到爆,隨便買一本來翻翻。
累死了,睡覺去。
