1. 程式人生 > >購物車實現原理(一)

購物車實現原理(一)

購物車相當於現實中超市的購物車,不同的是一個是實體車,一個是虛擬車而已。使用者可以在購物網站的不同頁面之間跳轉,以選購自己喜愛的商品,點選購買時,該商品就自動儲存到你的購物車中,重複選購後,最後將選中的所有商品放在購物車中統一到付款臺結賬,這也是儘量讓客戶體驗到現實生活中購物的感覺。伺服器通過追蹤每個使用者的行動,以保證在結賬時每件商品都物有其主。

購物車的功能包括以下幾項:

n 把商品新增到購物車,即訂購

n 刪除購物車中已定購的商品

n 修改購物車中某一本圖書的訂購數量

n 清空購物車

n 顯示購物車中商品清單及數量、價格

實現購物車的關鍵在於伺服器識別每一個使用者並維持與他們的聯絡。但是HTTP協議是一種“無狀態(Stateless)”的協議,因而伺服器不能記住是誰在購買商品,當把商品加入購物車時,伺服器也不知道購物車裡原先有些什麼,使得使用者在不同頁面間跳轉時購物車無法“隨身攜帶”,這都給購物車的實現造成了一定的困難。

目前購物車的實現主要是通過cookie、session或結合資料庫的方式。下面分析一下它們的機制及作用。

1. cookie

cookie是由伺服器產生,儲存在客戶端的一段資訊。它定義了一種Web伺服器在客戶端儲存和返回資訊的機制,cookie檔案它包含域、路徑、生存期、和由伺服器設定的變數值等內容。當用戶以後訪問同一個Web伺服器時,瀏覽器會把cookie原樣傳送給伺服器。通過讓伺服器讀取原先儲存到客戶端的資訊,網站能夠為瀏覽者提供一系列的方便,例如線上交易過程中標識使用者身份、安全要求不高的場合避免使用者重複輸入名字和密碼、入口網站的主頁定製、有針對性地投放廣告等等。利用cookie的特性,大大擴充套件了WEB應用程式的功能,不僅可以建立伺服器與客戶機的聯絡,因為cookie可以由伺服器定製,因此還可以將購物資訊生成cookie值存放在客戶端,從而實現購物車的功能。用基於cookie的方式實現伺服器與瀏覽器之間的會話或購物車,有以下特點:

n cookie儲存在客戶端,且佔用很少的資源,瀏覽器允許存放300個cookie,每個cookie的大小為4KB,足以滿足購物車的要求,同時也減輕了伺服器的負荷;

n cookie為瀏覽器所內建,使用方便。即使使用者不小心關閉了瀏覽器視窗,只要在cookie定義的有效期內,購物車中的資訊也不會丟失;

n cookie不是可執行檔案,所以不會以任何方式執行,因此也不會帶來病毒或攻擊使用者的系統;

n 基於cookie的購物車要求使用者瀏覽器必須支援並設定為啟用cookie,否則購物車則失效;

n 存在著關於cookie侵犯訪問者隱私權的爭論,因此有些使用者會禁止本機的cookie功能。

2. session

session是實現購物車的另一種方法。session提供了可以儲存和跟蹤使用者的狀態資訊的功能,使當前使用者在session中定義的變數和物件能在頁面之間共享,但是不能為應用中其他使用者所訪問,它與cookie最重大的區別是,session將使用者在會話期間的私有資訊儲存在伺服器端,提高了安全性。在伺服器生成session後,客戶端會生成一個sessionid識別號儲存在客戶端,以保持和伺服器的同步。這個sessionid是隻讀的,如果客戶端禁止cookie功能,session會通過在URL中附加引數,或隱含在表單中提交等其他方式在頁面間傳送。因此利用session實施對使用者的管理則更為安全、有效。

同樣,利用session也能實現購物車,這種方式的特點是:

n session用新的機制保持與客戶端的同步,不依賴於客戶端設定;

n 與cookie相比,session是儲存在伺服器端的資訊,因此顯得更為安全,因此可將身份標示,購物等資訊儲存在session中;

n session會佔用伺服器資源,加大伺服器端的負載,尤其當併發使用者很多時,會生成大量的session,影響伺服器的效能;

n 因為session儲存的資訊更敏感,而且是以檔案形式儲存在伺服器中,因此仍然存在著安全隱患。

3. 結合資料庫的方式

這也是目前較普遍的模式,在這種方式中,資料庫承擔著儲存購物資訊的作用,session或cookie則用來跟蹤使用者。這種方式具有以下特點:

n 資料庫與cookie分別負責記錄資料和維持會話,能發揮各自的優勢,使安全性和伺服器效能都得到了提高;

n 每一個購物的行為,都要直接建立與資料庫的連線,直至對錶的操作完成後,連線才釋放。當併發使用者很多時,會影響資料庫的效能,因此,這對資料庫的效能提出了更高的要求;

n 使cookie維持會話有賴客戶端的支援。

各種方式的選擇:

雖然cookie可用來實現購物車,但必須獲得瀏覽器的支援,再加上它是儲存在客戶端的資訊,極易被獲取,所以這也限制了它儲存更多,更重要的資訊。所以一般cookie只用來維持與伺服器的會話,例如國內最大的當當網路書店就是用cookie保持與客戶的聯絡,但是這種方式最大的缺點是如果客戶端不支援cookie就會使購物車失效。

Session 能很好地與交易雙方保持會話,可以忽視客戶端的設定。在購物車技術中得到了廣泛的應用。但session的檔案屬性使其仍然留有安全隱患。

結合資料庫的方式雖然在一定程度上解決了上述的問題,但從上面的例子可以看出:在這種購物流程中涉及到對資料庫表的頻繁操作,尤其是使用者每選購一次商品,都要與資料庫進行連線,當用戶很多的時候就加大了伺服器與資料庫的負荷。