摘要:ASP.Net是目前應用非常廣泛的web開發技術,使用Session實現電子商務網站的“購物車”模塊是目前web開發的主要手段。但是Session的使用必須謹慎。如果網站很大,不同的頁面使用同一個“購物車”保存信息,就會很容易造成數據錯誤。本文討論不同“購物車”數據按需供給的Session實現。
關鍵詞:ASP.Net Session 購物車
1 概述
大多數B/S結構的應用系統是采用HTTP協議通信的,由于HTTP協議無狀態的特征,因此在瀏覽器與服務器交互的過程中服務端需要維護客戶端的狀態。在B/S結構的系統中,購物車是客戶在選購商品時臨時存放數據的地方,是狀態管理的典型功能。本文中將類似于購物車在瀏覽器和服務器之間需要進行狀態管理的數據稱之為“購物車數據”。實現狀態管理的技術主要有兩類,一種是基于服務端的實現,如Session、數據庫的方式;另一種是基于客戶端的方式如Cookie等。本文將重點論述在使用Session技術處理“購物車數據”時如何避免沖突以及按需供給處理的問題。
2 “購物車”及其Session實現方法
2.1 購物車的概念和功能
“購物車”相當于現實生活中超市里的購物車,不同的是一個是實體車,一個是虛擬的。在電子商務網站選購商品時,可以像在超市里選購商品一樣,向虛擬“購物車”中添加自己需要的商品,而且可以在不同的頁面間跳轉而不丟失選購信息。所謂的“購物車”數據就是用戶在進行商品選購時產生的信息。服務器通過追蹤用戶的行為保證在結算時購物車與單據之間的對應關系。購物車的主要功能包括:
①添加商品;②刪除購物車中已有的商品;③修改購物車中已有商品的數量;④清空購物車;⑤顯示購物車中的商品信息。
2.2 購物車的Session實現
2.2.1 Session狀態管理
Session提供了可以保存和跟蹤用戶的狀態信息的功能,使當前用戶在Session中定義的變量和對象能在頁面之間共享,但是不能為應用中的其他用戶所訪問,因此利用Session實施對“購物車”的管理更為安全、有效。Session能很好地與交易雙方保持會話,可以忽視客戶端的設置。在購物車技術中得到了廣泛的應用。
2.2.2 Session實現購物車
Session是散列結構類型,以鍵值對的形式存儲數據。選購商品后可以采取如下方式將數據存入購物車:
Session[“MyCart”]=ShoppingCartObj;
用戶在選購物品后,可以查看購物車信息,也可以對購物車中已有的物品信息進行修改,可以采取如下方式讀取購物車信息:
cart=Session[\"MyCart\"]asShoppingCart;
2.3 “購物車”數據的應用 在WEB應用系統開發過程中,在很多情況下需要使用到類似于購物車的方式存儲數據,比如要跟蹤當前用戶的狀態、維護訂單的產品明細表、處理用戶項目信息等。
3 “購物車”數據按需供給
3.1 Session沖突 Session是以鍵名作為標識符存儲數據的,如果一個用戶在多個程序頁面中需要使用同一個頁面返回數據,并且這些數據是不同的,這個時候以固定鍵名的方式存儲數據就會發生問題。例如,用戶在新建銷售單時,必須使用Session對象保存銷售物品信息,如果使用了Session對象且會話未結束的情況下又利用Session對象創建采購單,此時的Session對象保存的信息是在創建銷售單時所保存的銷售物品信息,并非是用戶所希望獲取的采購單信息。這種情況就是Session對象的使用沖突。
3.2 按需供給 由上面的分析可知,“購物車”數據的沖突主要是由多個數據需方程序對同一個數據供方程序提出不同數據要求而導致Session鍵名沖突造成的。
因此可考慮將特征鍵名與需方程序URI連接起來作為動態鍵名,從而實現按需供給數據,避免了沖突。
4 基于Session按需供給實現
4.1設計思路
String類提供的GetHashCode()方法的實現為相同的字符串值返回相同的哈希代碼。因此,如果兩個String對象表示相同的字符串值,則它們返回相同的哈希代碼,該方法使用字符串中的所有字符生成相當隨機的分布式輸出,即使當輸入集中在某些范圍內時。
例如:stringstr1=\"A.aspx\";
stringstr2=\"B.aspx\";
stringstr3=\"Helloworld\";
stringstr4=\"Helloworld\";
則str1.GetHashCode()!=str2.GetHashCode().ToString();
str3.GetHashCode()==str4.GetHashCode().ToString();
在進銷存系統中,用戶在進行“購物車”選購物品時都是由不同單據的新建頁面進入的,例如銷售單新建頁——Sale_New.aspx。所以在使用Session創建“購物車”時首先判斷創建的“購物車”為哪個單據服務。
4.2實現方法
4.2.1 Sale_New.aspx頁面跳轉事件
stringUrl=Request.RawUrl;//獲取當前路徑
Response.Redirect(string.Format(\"Goods_List.aspx?Url={0}\",Url))
4.2.2 Sale_New.aspx頁面獲取“購物車”
stringcode=Request.RawUrl.GetHashCode().ToString();//通過String類提供的GetHashCode()方法產生一個值對Session進行標記
Goods_DTablegtable=1;
if(Session[code]!=1)
{
gtable=(Goods_DTable)Session[code];//獲取購物車物品信息
}
returngtable;
4.2.3 Goods_List.aspx頁面保存“購物車”數據
stringcode=\"\";
if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.QueryString[\"Url\"]))
{
stringUrl=
System.Web.HttpContext.Current.Request.QueryString[\"Url\"];
code=Url.GetHashCode().ToString();
Goods_DTablegtable=1;
/*將信息寫入內存中的表gtable*/
Session[code]=gtable;
}
當單據新建完成,即此次會話結束,Session[code]應及時清除。
5 結束語
以Session實現“購物車”功能的應用非常廣泛,在WEB應用系統中,實現購物車的主要難點是在于保證購物車與單據之間的對應關系。本文討論了在Asp.net中利用Session實現了數據的按需提給的實現。這種方法不僅有效地提高了系統的可靠性、安全性,同時也有利于網站的整體維護。
參考文獻:
[1]王世鋒,姚文琳,高桂霞.從ASP到ASP.NET的會話狀態管理.計算機與現代化,2007(2).
[2]吳學剛,伍海波.基于ASP技術的電子商務網站的設計與實現.電腦知識與技術,2010(12).
[3]徐照興,趙德福,劉武.基于Hashtable+Session技術的網上購物車的設計與實現.計算機與現代化,2010(6).