開始治療
心理醫生: 好。你今天感覺怎麼樣,維克多?西雅圖無狀態
開低級玩笑的人為了給能聽到談話的年輕女性留下印象,互相之間最經常說的事情之一就是:“HTTP是一種無狀態協議,Internet是無狀態開發環境”。用簡單的話來講,HTTP(HyperText Transfer Protocal )協議,作為web的骨干,不能夠記住與一個網站連接用戶的身份,所以對web頁的請求被看作是唯一和獨立的連接,與在它之前的連接無論如何都沒有關系 -- 這一點與今天很多愛冒險的十幾歲的年輕人的行為很象,他們每天喝? 夜,第二天早晨醒來對發生過什麼都不記得了,晚上再出去做同樣的事,一遍又一遍...
現在,如果你是漫無目的地從一個站點沖浪到另一個,沒有什麼問題。但是當你想從Amazon.com上買幾本書會怎麼樣呢?“在一個無狀態的環境中,記住所有在你的購物單上的物品是非常困難的,因為HTTP協議的這種無狀態的性質使得跟蹤選中物品是不可能的。
因此就要求一種能夠使記住狀態成為可能的方法,能夠跟蹤用戶的連接並且保存連接特定數據的東西。因此產生了“cookie”,它可以允許Web 站點在客戶系統的一個文件中保存客戶特定信息,並且當任何時候請求時都可以從文件中取出信息。所以,在上面的購物車例子中,被選中的商品可以加到cookie中,並且在消費者結帳時,可以被取出並呈現在購物單中。
基於cookie的解決方案存在一個問題,那就是它要求cookie能夠被客戶所接受。所以,有另一種解決辦法就是使用“session”,當一個客戶訪問一個Web站點時,用它來保存特定的一小塊數據。這個會話(session)數據在整個訪問期間被保存下來。一個session可以被看成一個信息籃,它保存著主機的變量對。這些變量對在整個訪間期間都存在,並且可以在任何時刻被處理。這個方法對協議的無狀態的特點提供了一流的解決辦法,並且在今天很多大型的網站上,可以跟蹤和保存信息,用於個人和商業交易。
每一個被創建的session 都有一個唯一的標識串,這個串被發送到客戶端,同時在服務端也生成了同樣唯一標識串的入口,或者放在文本文件或者在一個數據庫中。現在就可以注冊任何的session 變量 -- 這些普通的變量可以保存文本或數值信息,可以通過session 被讀出,或寫入。
現在,如果你已經跟隨著開放源碼運動,你已經知道了PHP ,在這個星球上最熱門的腳本語言。最新的版本是PHP4,包括了對session的創建和管理的支持,在下面的幾頁中,我們將向你展示如何使用它。如果你還在使用PHP3,不要失望 -- 我們也將涉及PHPLIB,它包括一組強大的PHP對象,可以在基於PHP3的站點上加入無縫的session管理。
在下面幾頁中,我們假設你已經有一個支持PHP4或PHPLIB的站點。如果還沒有,你應該下載這些包,並且將它們安裝到你的開發機器上去。PHP4,是一個質量優良的代碼,可以在PHP站點 http://www.php.net找到,最新的PHPLIB版本可以在http://phplib.netuse.de/找到。