[摘要] 本文主要內容是購物車的實現與修改,采用ASP技術中的內置對象Session來實現網站中購物車的功能。
[關鍵詞] ASP Session 購物車
一、前言
購物車是“網上商店”中的重要組成部分,其功能主要是記錄并累加客戶購買商品的相關信息,在客戶確認后將這些信息送入后臺數據庫。因此,為客戶提供一個方便、個性化的購物車將會大大提高客戶在網上購物的興趣。
二、程序設計基礎
購物車的實現主要采用的是ASP技術,ASP(ActiveSeverPages動態(tài)網頁)是一個位于服務器端的腳本運行環(huán)境。
ASP提供了一組可以在腳本中使用的內置對象,其中Session對象可以存儲特定客戶會話所需的信息。當客戶在應用程序的 Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個客戶會話中一直存在下去。
Session的工作原理:在一個應用程序中,當客戶端啟動一個Session時,ASP會自動產生一個長整數SessionID,并把這個SessionID送給客戶端瀏覽器,瀏覽器會把SessionID存放在Cookies內,當客戶端再次向服務器端送出HTTP請求時,ASP會去檢查申請表頭的SessionID,并返回該SessionID對應的Session信息。
三、購物車的實現
1.構建購物車
為處理客戶訂購商品的操作,自定義兩個Session屬性,分別是“spid”(用來保存商品名稱)和“num”(用來保存相應商品的訂購數量)。當客戶訂購了一種商品后,分三種情況對Session進行處理:
(1)購物車為空,即Session(“spid”)=“”,直接將spid與num加入Session;
(2)購物車非空且當前訂購的商品是購物車中沒有的,則處理方法同上;
(3)購物車非空但當前訂購的商品是購物車中已有的,Session保持不變。
程序實現的要點是如何判別當前訂購的商品在購物車中是否存在,因此,首先要將Session變量的內容拆分并存入數組:
array1=split(Session(“spid”),“:”)
然后用循環(huán)語句判別array1中是否有元素與傳遞來的spid相同并將結果存入變量ifbuy:
for i=0 to ubound(array1)-1
if array1(i)= Request.QueryString(“spid”) then
ifbuy=true
exit for
end if
next
將新增的商品信息加入Session:
Session(“spid”)=Session(“spid”)& Request.
QueryString(“spid”)&“:”
Session對象的另一個自定義屬性num的處理同spid相同。
2.購物車的顯示
顯示客戶已經購買的商品信息,即顯示Session變量的內容。只要將Session變量的內容拆分,存入數組中,再顯示數組的內容即可。購物車的顯示界面如圖所示,其中“數量”欄的類型為“text”,“取消本商品”欄的類型為“checkbox”。這兩欄的數據是可以變動的,在“取消本商品”欄中打“√”,再按“重新計算”,將在購物車中取消該商品。
實現顯示購物車的部分代碼如下:
<%
dim k
array1=split(Session(“spid”),“:”)
array2=split(Session(“num”),“:”)
k=0
do while k<ubound(array1) %>
<tr>
<td><p align=“center”><%=array1(k)%>
</p></td>
<td><p><input type=“text” name=“t1” size=“5” value=“<%=array2(k)%>”></p></td>
<td><p><input type=“checkbox” name=
“ifcancel” value=<%=k%> ></p></td></tr>
<% k=k+1
loop %>
<tr>
<td align=center>
<input type=“submit” name=“submit” value=“重新計算”
onclick=“return recal(this.form)”></td>
<td align=center colspan=“4”>
<input type=“submit” name=“Submit” value=“繼續(xù)購買”
onclick=“return onback(this.form)”></td>
</tr>
3.購物車的修改
在客戶點擊“重新計算”按鈕后,需要對購物車的內容進行修改,包括對數量的修改和將被取消的商品從Session中刪除。
對于數量的修改,只要將文本框中被變動過的數據重新存入Session中即可:
<%
array=split(Session(“num”),“:”)
if Request.Form(“t1”)<>“”then
Session(“num”)=“”
j=0
for each item in Request.Form(“t1”)
array(j)=item
j=j+1
next
for i=0 to ubound(array)-1
Session(“num”)=Session(“num”)&array(i)&“:”
next
end if %>
要從Session中刪除被選中的商品,首先要取得“checkbox”的返回值,它用來定位被取消的商品在Session變量中的位置?!癱heckbox”的返回值k是一個循環(huán)變量,是商品所在行的行數,其實也就是被選中商品在Session中的位置。如果不加返回值定義的話,“checkbox”的返回值是按自然數順序排列的。例如,在圖中所示的情況下,如果“ASP動態(tài)網頁設計”和“SQL Server 2000數據庫管理與開發(fā)”兩行被選中,若是“checkbox”不加返回值定義,它的返回值將分別為1和2,這樣就會導致把“ASP動態(tài)網頁設計”和“JSP核心技術”從Session中刪除的錯誤。
<% dim array1,array2,ifcancel(20),m1,m2,i,j
array1=split(Session(“spid”),“:”)
array2=split(Session(“num”),“:”)
m1=ubound(array1)-1
m2=ubound(array2)-1
’保存復選框checkbox的值
for i=1 to Request.Form (“ifcancel”).Count
ifcancel(i)=Request.Form (“ifcancel”)(i)
next
for i=1 to Request.Form (“ifcancel”).Count
’將checkbox選中的spid和num從Session中去掉
for j=ifcancel(j) to m1-1
array1(j)=array1(j+1)
array2(j)=array2(j+1)
next
m1=m1-1
for p=i to Request.Form (“ifcancel”).Count
ifcancel(p)=ifcancel(p)-1
next
Session(“spid”)=“”
Session(“num”)=“”
for j=0 to m1
Session(“spid”)=Session(“spid”)&array1(j)&“:”
Session(“num”)=Session(“num”)&array2(j)&“:”
next
next %>
四、總結
本文是用數組實現要顯示的商品信息。但在實際的系統(tǒng)開發(fā)中,這些商品信息的數據庫應來自后臺數據庫。還應該設置Session對象的TimeOut屬性值,以延長Session對象的生命周期。
參考文獻:
[1]趙增敏朱粹丹趙朱曦:《ASP動態(tài)網頁設計》.電子工業(yè)出版社,2005年6月
[2]吳鵬丁利群:《ASP程序設計教程與實訓》.北京大學出版社,2006年1月
[3]石碩:《網站設計與管理教程》.清華大學出版社,2007年1月