網上購物車的實現困難
網上購物車的實現並非像以上解釋的那樣簡單,實際上,網上購物車腳本是較難建立的腳本。究其原因,得先看看一個基本的Web瀏覽事務後面的支持機制。其一,Web的設計是無狀態的,即所有Web伺服器以同樣方式處理URL請求,與前面的任何請求無關;其二,瀏覽器也是以無狀態方式操作,採用與前面請求無關的方法來處理新的URL。例如,當用戶啟動自己的瀏覽器並請求一個URL(或者是一個HTML頁面,或是一個CGI腳本)時,瀏覽器會找到伺服器,建立一個連線,然後請求該URL,伺服器處理瀏覽器請求並返回所需信息後下線,就會忘記剛才用戶訪問的情況。用戶與伺服器聯繫時,就像從沒訪問過伺服器一樣,並且每個請求都有一個應答,這就是無狀態連線(Stateless Connection)。伺服器不會記住用戶,並且不能識別這是用戶第1次訪問還是第1000次訪問。這種無狀態連線的方式使得Web伺服器處理得更快、更有效,也不需要維護請求URL的瀏覽器的信息,但也會導致許多令人討厭的問題——網上購物車就是一個主要的例子。當顧客選中某個商品,將它放人自己的虛擬網上購物車時必須記住是什麼商品,最後到虛擬收銀台時,才知道應付多少錢。由於伺服器不會記住這些信息,同樣也不能讓用戶每次看見一個新頁面時都重新輸入已選擇商品的信息,只能讓腳本自己記錄所有前面用戶選擇的商品信息。
網上購物車的實現技術
為了實現網上購物車系統,解決Web應用程式的無狀態連線,從而保存瀏覽器端的Web頁面狀態信息(網上購物車內商品信息),目前已經有隱式窗體欄位方式和HTTP協定使用的Cookie方式等多種實現方法。
(1)隱式窗體欄位方式
網上購物車類型的腳本可通過隱式欄位來解決無狀態連線問題。這樣當用戶再次調用瀏覽器時,就能獲得從上次調用後的隱藏信息。網上購物車中的所有商品都有三個屬性:數量、價格和描述。當選中兩斤橘子,每斤橘子1.5元,網上購物車將把“2/1.5/Orange;”字元串寫入隱式欄位,分號標誌記錄的結束,記錄中的欄位之間用斜槓分開,而且允許任意數量的記錄匯集成一個長字元串。需要分離信息時,網上購物車簡單地搜尋分號和斜槓即可分解出選中商品的信息。隱式欄位是不顯示、用戶無法修改的欄位,網上購物車隱式欄位窗體是由CGI程式處理其他窗體提交數據時動態創建的。伺服器向瀏覽器傳送信息時,CGI程式將所有商品信息以隱式欄位方式寫入腳本,用戶提交包含隱式欄位的窗體時,欄位中原先存放的商品信息返回伺服器,伺服器分解出隱式欄位中存放的商品信息,從而保存了用戶網上購物車內的商品信息。
(2)Cookie方式
Cookie是持續保存狀態信息和其他信息的一種方式,信息在不同瀏覽器對話期間保存。Cookie由回響瀏覽器URL請求的伺服器程式傳送的信息組成,根據CGI程式的URL,傳送的Cookie將信息保存在瀏覽器本地的Cookies.txt檔案中,這個URL可以根據Cookie中包含的其他信息進行統一化。瀏覽器從Web伺服器請求一個URL時,瀏覽器檢索Cookies.真xt檔案,查看某個Cookie的URL請求是否符合請求的URL。然後,瀏覽器在URL請求中傳送符合請求的Cookie中包含的信息給Web伺服器。在網上購物車的實現過程中,當用戶選擇了要購買的商品並放入網上購物車時,系統採用Cookie方式處理,將選擇商品的信息以文本串的形式寫入瀏覽器本地機的Cookies.txt中,當下一次激活網上購物車時,Cookie方式會從瀏覽器本地機的Cookies.txt中讀取相應文本串的信息,從而獲得了購物車中已選擇商品的信息。