基于ASP的购物车设计与实现

时间:2022-04-19 07:05:41

基于ASP的购物车设计与实现

摘要:随着网络的飞速发展,网上购物已经走入日常生活,因此各类在线网站开发一个方便、快捷和人性化的购物系统是非常必要的。而“购物车”在在线购物类网站中又是一项非常重要的功能。纵观ASP购物车功能的方法,目前比较常用的方法有Cookie、Session或者数据库等。通过对Cookie、Session和数据库三种方法的介绍与比较,从而得出各自的优缺点。

关键词:ASP;购物车;Session;数据库

中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-30277-04

ASP-based Cart Design and Implementation

LI Zhong-ming

(Department of Computer Science,Top Shaoxing Information Vocational and Technical College,Shaoxing 312000,China)

Abstract:With the rapid development of the network, on-line shopping has entered the daily life, various online sites development of a convenient, fast and humanity of the shopping system is very necessary. "Cart" in the online shopping site in the category is a very important function. Throughout ASP Cart function is, the more common method Cookie, Session or databases. By Cookie, and database Session three methods were introduced and compared to arrive at their respective advantages and disadvantages.

Key words:ASP;Cart;Session;Database

1 引言

“购物车”在线购物类网站中是非常重要的功能。它是一个虚拟的购物篮,用户可以将自己喜爱的商品放入购物篮,同时也可以将不需要商品从你的购物篮中拿出去。它的出现使网上购物显得非常的简单、形象和人性化。

2 开发环境

采用ASP技术开发购物车功能,数据库采用Access。

配置ASP运行环境,即需要安装IIS,一般测试程序时,不需要做任何的设置。要注意的是IIS有很多版本,不同的系统基本上版本都不同,最好从原系统盘上安装。

3 购物车的设计与实现

要想在网站上实现“购物车”功能,有好几种方法,比如用Session、Cookie或者数据表等。这里将重点介绍和比较Session、数据表实现“购物车”设计与实现。

“购物车”设计如图1所示。

图1 购物车

3.1 Cookie实现购物车简述

3.1.1 Cookie介绍

Cookie是用户访问某些网站时,由Web服务器在客户端磁盘上写入的一些小的文本文件,用于记录浏览者的个人信息、浏览器类型、何时访问该网站以及执行过哪些操作等。ASP中可以采用Response对象的Cookies集合向客户端写入Cookie,采用Request对象的Cookies集合读取客户端的Cookie。

3.1.2 使用Cookie设计的优缺点

Cookie是通过服务器端CGI、脚本或者客户端脚本把信息保存在客户机上的,为服务器或客户机再次使用这些信息提供方便。在JavaScript中有一些用来对Cookie进行操作的函数,如设置Cookie值的Setcookie(name,value),删除Cookie的Deletecookie(name)等。使用Cookie来保存“购物车”信息的优点是,即使当用户关闭了浏览器窗口,“购物车”中的信息也不会丢失,并且它占用很少的服务器端资源,缺点是必须要求用户端浏览器支持Cookie并且打开它。

3.2 使用Session + Dictionary实现“购物车”功能

3.2.1 Session、Dictionary介绍

Session对象存储特定用户会话所需的信息。Session对象是在每一位访问者从Web站点或Web应用程序中首次请求一个ASP页时创建的,它将保留到默认的期限结束或通过脚本设置中止的期限。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。利用Session的功能,可以将购物信息(商品ID和购买数量)存储到Session变量中。

为了更加灵活实现的“购物车”,设计过程中可以引进Dictionary对象。Dictionary 对象与关联数组是等价的,Dictionary对象用于数组,可以存储key/item数据对,其中key的值是惟一的,而item的值可以重复,且item项与key项相关联。这样key可以用来存储购买商品的ID,而item则可以存储购买商品的数量。

3.2.2 设计与实现

(1)放商品入“购物车”

将商品ID和数量写入到Dictionary中,使用的方法是Add。该方法用于向Dictionary对象添加键和项目。格式:对象.Add key , item

判断是否存在Session("cart"),不存在则创建一个Session("cart")对象

<%

If Not IsObject (Session ("cart")) Then

Set Session ("cart")=Server.CreateObject ("Scripting.Dictionary")

End If

%>

将Session("cart")展开一个本地副本调用。

<% Set Cart=Session("cart") %>

如果该商品的ID不存在,则可以使用Dictionary对象的Add方法将商品的编号(ProductID)和购买的数量Num写入到Cart中。

<%

If Not Cart.Exists (ProductID) Then

Cart.Add ProductID,Num

End If

%>

接着再将修改后的本地副本整体赋值给Session ("cart")

<% Set Session ("cart")=Cart %>

(2)查看“购物车”中商品

将Session ("cart")中的商品ID获取后,从商品表中获取相应商品信息。可以采用将Session ("cart")中的数据组分别赋值给Keys(商品ID组)和Items (商品数量组)这2个变量。

<% Set Cart=Session ("cart")

Keys=Cart.keys

Items=Cart.items

%>

接着可以使用循环语句显示用户购买的商品和数量以及总价等信息。

<% For I = 0 To Cart.Count-1 %>

Dim prodid

prodid= keys(i)

Set Rs = Server.CreateObject ("ADODB.Recordset")

ssql= "SELECT * FROM products WHERE pid ="&int(prodid)

Rs.Open ssql, conn, 1,3

%>

‘显示Rs中的记录

……

<% Rs.Close

Next

%>

(3)修改“购物车”中商品数量

设计将商品的数量分别修改,这样就可以利用Session("cart")中存储的购买商品ID来进行修改用户购买商品的数量。编写一个函数用于获取数量和编号,然后重新导航到修改数量程序文件。

<script language="JavaScript1.2">

<!--

function changenum(id,num){

window.location.href="http://change.asp?id="+id+"&num="+num

}

-->

</script>

修改数量实现程序:

<%

id=request.Querystring("id")

num=request.Querystring("num")

Set Cart=Session("cart")

If Cart.Exists(id) Then

Cart.item(id)=Int(num)

End If

Set Session("cart")=cart

Response.Redirect "cart.asp"

%>

(4)删除“购物车”中的商品

只需要知道被删除的商品的ID,就可以使用Dictionary对象的Remove方法实现删除。

<%

ProductID=Cstr(Request.Querystring("ProductID"))‘获取要删除的商品ID

Set Cart=Session("cart")

If Cart.Exists(ProductID) then ‘判断商品ID是否存在

Cart.Remove(ProductID) ‘在Cart中删除该ID

End If

Set Session("cart")=cart

%>

如要清空“购物车”可以使用Dictionary对象的RemoveAll方法实现。

<% Cart.Removeall() %>

3.2.3 用Session + Dictionary设计的优缺点

Session + Dictionary 实现“购物车”功能是分别充分使用了两对象的主要功能。创建一个Session("cart")对象实例,该对象中存储的数据允许用户在网站中的各页面跳转而不丢失,Dictionary对象可以很方便的存储用户购买的商品ID和商品的数量。使用Session + Dictionary 实现“购物车”的优点是,对“购物车”的所有操作(添加、删除、修改和清空等)都在服务器上进行,与用户使用的浏览器无关。缺点是它占用很多的服务器端资源,用户关闭网站的所有窗口或一段时间没有更新,Session("cart")中的数据将丢失。

3.3使用数据表实现“购物车”功能

3.3.1数据表的建立

“购物车”中存储的是一些临时的商品信息,即用户购买的商品ID和商品的数量。但使用数据表来作临时存储,仅保存商品ID和数量是不够的,我们还要确定购买者的身份。用户有时需要调整商品的数量,需要添加记录编号。当用户确认购买,下订单后这些记录将被删除。

因此购物车表(Goodsbasket)的结构如表1。

表1 购物车表

3.3.2 设计与实现

首先用户登录时随机生成一个流水号,将其保存在Session("Class_num ")中。

(1)放商品入“购物车”

添加一件商品的ID购购物车相应的数据表中,即Goodsbasket表。操作为在Goodsbasket表查找流水号Class_num为Session("Class_num ")且Good_id为G_id的记录,如果查找到记录,则更新该条记录中的Good_num加1。如果没找到,则插入一条新记录到数据表中。

实现程序:

G_id=request.Querystring("id")

Ssql="Select * From Goodsbasket Where Class_num='"& Session("Class_num ")

Ssql=Ssql&"' and Good_id="&G_id

Set Rs=Conn.Execute(Ssql)

If Rs.EOF then

Ssql="Insert into Goodbasket(Good_id,Good_num,User_id,Class_num)"

Ssql=Ssql&" Values("&G_id&","&G_num&","&U_id&"

Ssql=Ssql&",'"&Session("Class_num ")&"') "

Else

Ssql="Update GoodBasket Set Good_num="&Rs("Good_num")+1

Ssql=Ssql&" Where id="&Rs("id")

End If

Conn.Execute(Ssql)

(2)查看“购物车”中商品

可以联合检索商品表(Goods)和购物车表(GoodBasket),显示用户的购买信息。

实现程序:

Ssql="Select Goods.*,GoodBasket.* From Goods,GoodBasket"

Ssql=Ssql&" Where GoodBasket.Good_id=Goods.G_id and"

Ssql=Ssql&" Class_num='"&Session("Class_num ")&"'"

Set Rs=Server.CreateObject("ADODB.Recordset")

Rs.Open Ssql,Conn,1,3

(3)修改“购物车”中商品数量

设计时将商品的数量分别修改,这样就可以利用购物车表中的购买记录编号来进行修改用户购买商品的数量。编写一个函数用于获取数量和编号,然后重新导航到修改数量程序文件。

<script language="JavaScript1.2">

<!--

function changenum(id,num){

window.location.href="http://change.asp?id="+id+"&num="+num

}

-->

</script>

修改数量实现程序:

<%dim id,num,Ssql

id=request.Querystring("id")

num=request.Querystring("num")

Ssql="Update GoodBasket Set Good_num ="&num&" where id="&id

Conn.execute(Ssql)

%>

(4)删除和清空“购物车”中商品

可以按照购物车表中的购买记录编号来直接删除不需要的商品。

实现程序:

<%

Id=Request.QueryString("id")

Ssql = "Delete from GoodBasket Where id="&Id

Conn.Execute(Ssql)

%>

清空“购物车”中商品,可以按照流水号来删除

<%

Ssql = "Delete from GoodBasket Where Class_num=’"& Session("Class_num ")&"’"

Conn.Execute(Ssql)

%>

3.3.3 数据表实现“购物车”功能的优缺点

数据表是通过在服务器上的一张临时表,把购买信息保存。用户购买和删除的都在临时表中操作,当用户确认后在将购买的商品从临时表写入订单表。使用数据表保存“购物车”信息的优点是,所有的操作都在服务器上进行,与

用户使用的浏览器无关,用户离开网站后之前购物数据将会失效。缺点是它占用很多的服务器端资源。

4 结束语

在ASP技术中,常使用Session,Cookie以及数据表等方法实现“购物车”功能,这些方法的共同点是,产生一个临时存放用户购物信息的存储空间,不同的是这些信息存放的位置和程序设计的方法。Session方法是将数据存储在服务器端的Session("cart")中,Cookie方法是存储在客户端的Cookie文件中,数据表方法是存储在服务器端的GoodBasket表里。这些实现的方法各有优缺点,设计者可以根据实际情况进行选择,一般的在线购物类网站可以选择Session+Dictionary方法实现“购物车”。

参考文献:

[1] 李香敏.用ASP轻松开发Web网站[M].北京:北京希望电子出版社,2000:296-318.

[2] 赵增敏,朱粹丹,赵朱曦.ASP动态网页设计[M].北京:电子工业出版社,2005:138-145.

[3] 曹建.ASP实例教程[M].北京:电子工业出版社,2000:276-289.

上一篇:ARP病毒的入侵检测系统 下一篇:基于Struts架构的高校图书馆MIS系统