長沙發上的對話(一)

開始治療

心理醫生: 好。你今天感覺怎麼樣,維克多?

病人: 不太好,醫生。我近來感到有點憂鬱…

心理醫生: 那是為什麼,維克多?

病人: 我不知道,醫生。我睡眠不太好,而且我一點胃口也沒有。有一天我們去一個意大利餐館,要瞭通心面 — 但時當他們把它端上來的時候,我一點也吃不下去。我就一直看著它,在我的頭裡一直回蕩著“女高音”的主題曲…

心理醫生: 傢裡怎麼樣?

病人: 都很好,我想。Marge大部分時間都在廚房,試她從網上下載的菜譜。孩子們每天很早就出去瞭,一般在吃飯時才看得見他們,但是現在他們開始在Burger King吃瞭。那我也不能責備他們。

心理醫生: 工作 – 都很好吧?

病人: 不太好 – 我有一個虐待成性的魔鬼老板,他打算打我的生活變成象Dilbert Zone一樣!

心理醫生: 跟我說一說他吧。

病人: 好,你知道我是做什麼的 – 我是一個在Used Socks. Inc.的web程序員。下個星期我們的新網站就要使用瞭,我們正在做著完全不同的東西 — 一個在線商店,供人們出售他們的舊物。我們得到瞭一些好心人的投資 – 6百萬元,如果我們成為在web最受歡迎的舊物門戶,我們還可得到更多的投資。

心理醫生: 聽上去對你不錯嘛。

病人: 你說的對。但是,然後有一天老板進來,他說他交給我一項開發在線商店購物車的工作。他明確地要求我用什麼叫“session”的東西。當然,隻不過讓事情變得有趣,他說他想在兩天內做完並能運行…虐待狂、變態!

心理醫生: 有問題嗎?

病人: 有,特別是首先我根本不知道“session”是什麼,或怎麼去用它。我意思是說,我原以為一個session 就是對一個病人的短期治療 — 有一點象我們正在做的一樣。

心理醫生: 哦,維克多,維克多…這就是麻煩你的事嗎?我想我可能有東西能幫助你…

西雅圖無狀態

  開低級玩笑的人為瞭給能聽到談話的年輕女性留下印象,互相之間最經常說的事情之一就是:“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站點 https://www.php.net找到,最新的PHPLIB版本可以在https://phplib.netuse.de/找到。

You May Also Like