论文部分内容阅读
摘要: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=null;
if(Session[code]!=null)
{
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=null;
/*將信息写入内存中的表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).
关键词: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=null;
if(Session[code]!=null)
{
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=null;
/*將信息写入内存中的表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).