本科生毕业论文(设计)
(2000级2004届)
论文(设计)题目:电子商务网站整体结构及安全技术论述(Thewholestructureofe-merceWebsiteandsafepracticearedescribed)
作者:二级学院,专业:信息工程学院,电子信息工程
班级:电子信息工程001
指导教师(职称):
论文字数:11896字
论文完成时间:
目录
摘 要等等等等等等等等等等等等等等4
Abstract等等等等等等等等等等等等等等5
第一章引言等等等等等等等等等等等等等6
1.1何为电子商务等等等等等等等等等等等等等6
1.1.1电子商务定义等等等等等等等等等等等等6
1.1.2电子商务类型等等等等等等等等等等等等6
1.1.3电子商务的优势与商机等等等等等等等等等等等6
第二章电子商务网站的前端系统等等等等等等等等等等6
2.1一般会员管理等等等等等等等等等等等等等6
2.1.1网络电子商店前台基本功能等等等等等等等等等等6
2.1.2网络电子商店前台系统程序基本结构等等等等等等等等6
2.1.3文件结构等等等等等等等等等等等等等6
2.1.4数据结构等等等等等等等等等等等等等6
2.1.5会员系统等等等等等等等等等等等等等9
2.1.6注册会员系统等等等等等等等等等等等等10
2.1.7结束语等等等等等等等等等等等等等等11
2.2商品展示等等等等等等等等等等等等等等11
2.2.1商品展示等等等等等等等等等等等等等11
2.2.2关 键 词查询等等等等等等等等等等等等等11
2.2.3商品详细资料等等等等等等等等等等等等12
2.2.4结束语等等等等等等等等等等等等等等12
2.3购物车及结帐系统等等等等等等等等等等等等12
2.3.1购物车工作等等等等等等等等等等等等等12
2.3.2结帐系统等等等等等等等等等等等等等14
2.4历史订单查询等等等等等等等等等等等等等14
2.4.1历史订单查询等等等等等等等等等等等等14
2.4.2历史订单详细资料查询等等等等等等等等等等14
2.4.3结束语等等等等等等等等等等等等等等14
第三章电子商务网站后端管理系统等等等等等等等等等等14
3.1基本数据管理等等等等等等等等等等等等等14
3.1.1商品类别数据维护等等等等等等等等等等等14
3.1.2商品基本数据维护等等等等等等等等等等等14
3.1.3供应商数据维护等等等等等等等等等等等等15
3.1.4结束语等等等等等等等等等等等等等等等等15
3.2交易数据管理等等等等等等等等等等等等等15
3.2.1订单数据维护等等等等等等等等等等等等15
3.2.2数据控制等等等等等等等等等等等等15
3.2.3结束语等等等等等等等等等等等等等等15
第四章电子商务网站安全技术等等等等等等等等等等等15
4.1程序本身的完善等等等等等等等等等等等等15
4.1.1数据库的安全等等等等等等等等等等等等15
4.1.2模块的封装等等等等等等等等等等等等16
4.1.3网上跟踪等等等等等等等等等等等等等16
4.2IE的设置等等等等等等等等等等等等等等20
4.2.1COOKIES技术等等等等等等等等等等等等20
4.2.2IE的安全设置等等等等等等等等等等等等21
电子商店前台系统程序基本结构前端应用程序接口,包含各种扩展名为aspx及ascx文件————————>,
<,————————各种商业对象,包含各种扩展名VB编译成DLL的文件————————>,
<,————————SQLSERVER或
ACCESS数据库上图是实现网络电子商店的程序运行的基本结构,这种运行结构就是所谓的三层式结构,此种结构最主要的是将前台接口,商业对象及数据库独立分开,将此三者分开,程序运行起来有更大的灵活性,前台接口只负责数据的表现,ASP.NET本身就提供了许多表现数据的WEBCONTROL让你很轻松就可以完成前台数据库表现接口设计.
至于商业对象就是负责将一些商业逻辑运算封装到对象,对象中运算方法则最主要是当作后台数据库与前台接口的桥梁,ASP.NET也提供很简单的方法让您建立,修改及布置商业对象.至于数据库,最主要的功能就是存储数据,就像微软的产品来说最有名的前台数据库就是Access了,最有名的后台数据库就是大名鼎鼎的SQLSERVER,在此网络电子商店系统选择的数据库是SQLSERVER.
2.1.3文件结构
根据系统分析的结果,将分为三个部分来说明
1)有关ASCX文件部分:
(1)_head.ascx:负责窗口标题的pagelet,
(2)_class.ascx:负责表现商品类的pagelet,
(3)_TopItems.ascx:负责最畅销的手机的pagelet,
2)有关ASPX文件部分:
(1)CartAdd.aspx:将商品放入采购车,
(2)CheckOut.aspx:结帐处理程序,
(3)Default.aspx:网站默认的主页,
(4)Login.aspx:会员登录程序,
(5)Member.aspx:会员注册程序,
(6)OrderDetails.aspx:历史订单详细资料,
(7)OrderList.aspx:历史订单总结,
(8)MobileDetails.aspx:手机详细数据,
(9)MobileList.aspx:手机陈列,
(10)Cart.aspx:采购出处理程序,
(11)LogoOut.aspx:注销程序,
(12)Index.aspx:会员默认主页,
他们之间的关系是:
Default.aspx——>,Login.aspx或menber.aspx——>,MobileList.aspx——>,MobileDetails.aspx——>,CartAdd.aspx——>,Cart.aspx——>,CheckOut.aspx——>,OrderList.aspx——>,Loginout.aspx——>,index.aspx
(注:由于我对将功能块直接写到网页中,因此没有了写VB文件)
2.1.4数据库结构(estroe.mdb)
根据系统分析的结果我们将此系统分为九个数据表来说明,如表2-1到2-9所示.
表2-1会员数据表(Customer)
字段名称数据类型主键说明Customer_NO自动编号*客户编号Customer_Name文本客户名称Customer_ID文本客户帐号Customer_Psd文本Customer_Birthday日期/时间生日Customer_Sex文本性别Customer_Address文本地址Customer_文本电子邮件Customer_RegDate日期/时间注册日期Customer_Tel文本
表2-2商品类别数据表(Class)
字段名称数据类别主键说明Class_No自动编号*类别编号Class_Name文本类别名称
表2-3商品数据表(Product)
字段名称数据类型主键说明Poduct_No自动编号*商品编号Product_Name文本商品名称Class_No数字类别编号Supplier_No数字供货商编号Product_Price数字商品Product_Picture文本商品图片Product_Des备注商品描述
表2-4采购车(ShoppingCart)
字段名称数据类型主键说明Cart_No自动编号*采购车编号Cart_ID文本采购车IDCart_Qty数字货物数量Product_No数字商品编号Cart_Date日期/时间建立日期
表2-5订单主文件(Orders)
字段名称数据类型主键说明Order_No自动编号*订单编号Customer_ID文本客户帐号Order_Date日期/时间日期Payment_No数字付款方式编号Translate_No数字运送方式编号Order_address文本送货地址
表2-6订单详细信息文件(Order_List)
字段名称数据类型主键说明Order_No数字*订单编号Order_ItemNo自动编号*详细信息文件编号Product_No数字商品编号Product_Price数字商品单价Product_Qty数字数量
表2-7供货商(Supplier)
字段名称数据类型主键说明Supplier_NO自动编号*供货商编号Supplier_Name文本供货商名称Supplier_Address文本供货商地址Supplier_Manager文本负责人Supplier_Contact文本联系人Supplier_Tel文本Supplier_文本电子邮件
表2-8付款方式(Payment)
字段名称数据类型主键说明Payment_No自动编号*付款方式编号Payment_Name文本付款方式名称
表2-9送货方式(Translate)
字段名称数据类型主键说明Translate_No自动编号*运送方式编号Translate_Name文本运送方式名称
他们之间的关系如下:
product表的字段Product_No,Class_No,Supplier_No分别对应ShoppingCart表与Order_List表的Product_No,Class表的Class_No和Supplier表的Supplier_No,
Orders表的字段Order_No,Customer_ID,Payment_No,Translate_No分别对应Order_List表的Order_No,Customer表的Customer_ID,Payment表的Payment_No和Translate表的Translate_No,
2.1.5会员系统
一般的会员系统,不外乎是收集客户的数据,发送电子简报,然后从电子简报中夹带公司的广告信息促销办法,最新消息发布,以便让顾客随时知道公司的最新动态,以让公司及个人掌握商机.通常会员注册系统有分为需要客户进来打开启用码的和只是输入基本数据.通常需要起用码的系统,都是对客户数据要求比较准确的,所以要确定电子邮件信箱是正确的,以便将系统生成的启用码送到客户的信箱,然后客户再根据这个启用码连上网站,输入启用码,正式起用这个帐号.不过一般网站的会员系统只是输入基本数据,对客户数据要求准确性的要求不高,相对得成为会员的步骤也比较简单.
要建立一个电子商务网站,首先要先建立会员管理系统,因为电子商务网站对于会员数据的准确性要求比较高,所以决定使用起用码的方式来打开帐号,然后用此会员管理系统来收集客户的信息,分析客户的购写行为,对客户作一对一的行销,发电子邮件,寄促销信.
由于我做的网站没有放到万维网上,所以没有动用启用码,但我必须谈一下这方面的技术,下面是我做的一个起用码,说的简单点就是要求用户必须填写正确的数据,通过邮件的方式来加以确认.
PublicFunctionAddMemenber(fullNameasstring,UserIDasString,Passwordasstring,sexasstring,Birthdayasstring,telasstring,addressasstring,asstring)asstring
Dimconnas
OleDbConnection等于newOleDbConnection(ConfigurationSetting.AppSetting("DSN"))
'生成启用码
DimbeginCodeasinteger
Randomize
beginCode等于CInt(10000000*((9*Rnd)+1))
DimSQLAsString
SQL等于"InsertintoCustomer(Customer_Name,Customer_ID,Customer_Pwd,Customer_Sex,"
SQL等于SQL+"Customer_Birthday,Customer_Tel,Customer_Address,Customer_,Customer_Code)"
SQL等于SQL+"values('"&,fullName&,"','"&,userID&,"','"&,password&,"','"&,sex&,"',"
SQL等于SQL+"'"&,Birthday&,"','"&,Tel&,"','"&,Address&,"','"&,&,"','"&,BeginCode&,"')"
DimmyCommandAsOleDbCommand等于newOleDbCommand(SQL,myConnection)
conn.Open()
myCommand.ExecuteNonQuery()
Try
DimmailAsMailMessage等于NewMailMessage
mail.To等于
mail.From等于"whz_35@eyou."
mail.Subject等于"启用码"
mail.Body等于cstr(BeginCode)
SmtpMail.Send(mail)
Finally
conn.Close()
EndTry
ReturnUserID.ToString()
EndFunction
生成启用码也就是利用随机数的方式生成,这一段程序就是当用户输入数据后,跟着我们就利用寄信组件SmtpMail发送启用码到会员的电子邮件地址,要注意的是使用寄信组件SmtpMail必须引入System.Web.Mail名字空间程序才能正常运行.
2.1.6注册会员系统
系统安全,首先是顾客资料的安全,在顾客成为本网站的会员时,我们必须对顾客的资料进行加密,在ASP.NET中提供了加密的功能.名字空间System.Web.Security中包含了类FormsAuthentication,其中有一个方法HashPasswordForStoringInConfigFile.这个方法可以将用户提供的字符变成乱码,然后存储起来.注意此方法是不能继承的.
如下图:是我做的一个用户注册页面,简单明了.
下面的代码就是在做注册页面时将数据加密后存储到数据库的过程
ImportsSystem.Web.Security
ImportsSystem.Data
ImportsSystem.Data.SqlClient'////////所需要的名称空间
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimPassFormateAsString
'///////////////EncryptPassword调用函数
PassFormate等于EncryptPassword(uid.Text,"md5")'////或者是EncryptPassword(uid.Text,"sha1")
'TextBox2.Text等于EncryptPassword(uid.Text,"md5")
'TextBox3.Text等于EncryptPassword(uid.Text,"sha1")
'///////////这些大家自己试验吧
'TextBox4.Text等于FormsAuthentication.FormsCookieName
'TextBox5.Text等于FormsAuthentication.FormsCookiePath
'TextBox6.Text等于FormsAuthentication.GetRedirectUrl(uid.Text,True)
'FormsAuthentication.SetAuthCookie(uid.Text,True)
DimsqlAsString等于"insertintopwd(uid,pwd)values(@uid,@pwd)"
DimmAsSqlCommand等于NewSqlCommand(sql,conn)
conn.Open()
m.Parameters.Add(NewSqlParameter("@uid",SqlDbType.Char,16))
m.Parameters("@uid").Value等于uid.Text
m.Parameters.Add(NewSqlParameter("@pwd",SqlDbType.Char,16))
m.Parameters("@pwd").Value等于PassFormate
m.ExecuteNonQuery()
EndSub
'////////////////定义加密函数,可以随时调用.
FunctionEncryptPassword(ByValpasswordAsString,ByValpasswordformateAsString)
Ifpasswordformate等于"sha1"Then
EncryptPassword等于FormsAuthentication.HashPasswordForStoringInConfigFile(password,"sha1")
ElseIfpasswordformate等于"md5"Then
EncryptPassword等于FormsAuthentication.HashPasswordForStoringInConfigFile(password,"md5")
Else
EncryptPassword等于""
EndIf
EndFunction
至于用户的验证也是一样的思路了.
2.1.6结束语
在互联网上会员管理是非常常用的功能,但是希望我们在了解并引用外,更要加以扩充和加密.我们可以用SLL将数据加密,这部分可以用windows2000系统安全功能来增强.
2.2商品展示
在上一节中已经介绍了系统的内容(包含文件的结构,功能),并说明会员管理的内容.在这节中将说明电子商城的商品展示部分,这属于电子商城用户前端.
2.2.1商品查询
商品分类查询功能应具有:
1),利用_Class.ascx产生各分类
2),查询各分类的商品
在这里我们建立_Class.ascx这个Pagelet,做一个Pagelet的最主要用意,就是实现模块化,把经常会用到的程序接口包装成一个Pagelet,那么以后如果程序中要用到则可以直接引用就可以了._class.ascx最主要的用意就是将商品分类的class数据表的数据显示出来.代码在代码目录中,这里就不详述了.
2.2.2关 键 词查询
关 键 词查询应具备如下功能:
1),利用_Head.ascx产生查询界面
2),根据用户输入关 键 词查询各商品
_Head.ascx是一个Pagelet对象,Pagelet对象的作用,前面已经说明了,在此抽出有关查询接口的部分,程序代码如下:
<,formmethod等于"post"action等于"Search.aspx"id等于"frmSearch"name等于"frmSearch">,
<,inpe等于"text"name等于"txtSearch"ID等于"txtSearch"SIZE等于10>,
<,inpe等于"submit"value等于"查询商品"id等于image1name等于image1>,
<,/form>,
其实这是一段简单的HTMLForm的语句,而这个Form的Action指向search.aspx,所以查询和显示都会在search.aspx中处理.代码在代码目录中,这里就不详述了.
2.2.3商品详细资料
商品详细资料是利用Mobilelist.aspx传入的参数找出商品的详细资料,在商品陈列系统中,通常商品在陈列的时候为了一次可以显示较多的数据所以第一次查询出来的商品都只是做一个简单的解释,不会显示商品的所有的细节,用户对某个商品有兴趣然后再让用户利用一个超级链接去看商品的详细的资料,而mobileDetails.aspx就是显示商品详细资料的程序.
2.2.4结束语
在互联网上商品展示是一种非常常见的功能,但是希望在我们了解并引用外,能加以扩充,创造出更友善的接口,让用户更快容易找到商品,并充分了解商品.
2.3购物车及结帐系统
一般的电子商务网站购物车系统,就象我们逛超级市场推着一部购物车一样,看到喜欢的东西就会把它放入购物车里面,如果逛到一半发现有更好的东西,您可能会将原来的东西放回架上,也有可能一起写回去,逛到最后摸摸口袋发现忘了带钱包,只好将购物车的东西一一放回,购物车系统就是要作到很容易添加商品到购物出,修改及删除购物车中的商品.
结帐系统最主要的功能就是结帐和运送,在超级市场我们将东西防入购物车接着就是到柜台结帐,结完帐以后我们就可以高高兴兴地将东西带回去,可是在网络电子商店就不能这样做,这一个原因就是结帐,也就是资金流,在超级市场您可以用或是信用卡,而在网络电子商场就只能用邮局汇款,银行转帐,信用卡.第二原因就是运送,也就是物流,在超级市场您也可以自己将东西提回家,但是在网络电子商店就只能利用其他的物流系统,例如邮局或是货运公司.在网络电子商店上如果要处理资金流通常要面对许多问题,例如付款机制问题,收单银行问题,网络传输安全问题,常常是需要大量商家和消费者相互配合才能够完成.至于物流方面更是需要物流厂商的配合,例如我们在网络电子商店收到一笔订单,如果消费者用信用卡利用SSL方式在线刷卡,商家也取得授权码,代表这笔订单的资金流部分部分已经完成,但接下来的物流部分我们是不是要将这笔订单交给物流厂商,物流厂商根据送货地址将商品送到消费者手里,然后物流厂商再将货物送达到客户的信息传给网络电子商店,网络电子商店才可以将此订单正式结案.所以每个环节都需要大力协调厂商的配合才能完成.在我们的这个网络电子商店的结帐系统,只做到结帐的时候用户输入付款及送货的资料订单数据中,已便让商家得到这些信息.
2.3.1购物车工作
根据上述说明,所以添加商品到购物车的流程如下:
1)先从系统取得CartID
2)添加商品数据到购物车
3)显示购物车内容
FunctiongetshoppingCartID()asstring'得CartID
DimContextasSystem.web.HttpContext等于system.web.HttpContext.Current
Ifcontext.User.Identity.Name<,>,""then
returncontext.user.Identity.Name
Endif
EndFunction
利用以上程序得CartID.再利用Request.Params("Product_NO")来从地址栏中接收URL参数,判断是否接到值,如果有值就将此商品编号以参数形式传到AddItem函数,在AddItem函数中我们先将接受前端传入的三个参数,然后利用参数CartID和ProductId组合成一个SQL查询字符串,查询ShoppingCart数据表是否有此商品存在,如果有则算出此商品的数量,再调用AddItem1函数来更新ShoppingCart数据表,接着将网页连接到Cart.aspx来显示购物车的数据,程序如下:
subAddItem(Cart_IdasString,ProductIdasInteger,quantityasInteger)'AddItem函数
DimConnasOleDbConnection
DimProvider等于"Provider等于Microsoft.Jet.OLEDB.4.0"
DimDataBase等于"DataSource等于"&,Server.MapPath("../data/estroe.mdb")
conn等于NewOleDbConnection(Provider&,","&,DataBase)
conn.open()
DimcmdasOleDBCommand
Dimsql等于"SelectCount(Product_No)asNumFromShoppingCartWhereProduct_No等于"&,ProductI
&,"andCart_Id等于'"&,Cart_ID&,"'"
cmd等于newoleDbCommand(sql,conn)
DimRdasOleDbDataReader
Rd等于cmd.ExecuteReader()
DimQtyasInteger
WhileRd.Read()
Qty等于CInt(Rd.Item("Num"))
EndWhile
Rd.Close()
conn.Close()
AddItem1(Cart_Id,ProductID,1,Qty)
EndSub
'AddItem1函数
subAddItem1(Cart_Idasstring,ProductIdasInteger,QuantityasInteger,NumasInteger)
DimConnasOleDbConnection
DimProvider等于"Provider等于Microsoft.Jet.OLEDB.4.0"
DimDataBase等于"DataSource等于"&,Server.MapPath("../data/estroe.mdb")
conn等于NewOleDbConnection(Provider&,","&,DataBase)
conn.open()
DimCmdasOleDbCommand
IfNum>,0then
Dimsql等于"UpdateShoppingCartSetCart_Qty等于Cart_Qty+1WhereProduct_No等于"&,ProductId&,"AndCart_Id等于'"&,Cart_Id&,"'"
cmd等于NewOleDbCommand(sql,conn)
else
Dimsql1等于"InsertIntoShoppingCart(Cart_Id,Cart_Qty,Product_No)Values('"&,Cart_Id&,"','"&,Quantity&,"','"&,ProductID&,"')"
cmd等于NewOleDbCommand(sql1,conn)
EndIf
cmd.executeNonQuery()
conn.Close()
EndSub
.2.3.2结帐系统
既然用户已经完成购物,接下来就要进行结帐工作了,结帐工作流程如下:
1)先从系统取得CartID
2)利用CartID来获取ShoppingCart数据表的商品
3)将数据显示出来
如下图:是我做的一个结账系统的页面截图
具体程序不在祥述,代码在代码目录中.
2.4历史订单查询
完成了前面的系统,但是考虑到客户完成了商品的采购,有一天也许想看看历史订单,统计一下一共购写了多少商品以便作为下一次采购商品时的参考,我们在网络电子商店的前端系统加入了历史订单查询系统,好让消费者能查询自己的历史订单.
2.4.1历史订单查询
由前述可知,历史订单除了让客户自行查阅外,更可以用来了解客户的消费习惯及兴趣,他大致流程如下:
1)先从系统中取得customerID
2)利用CustomerID取得订单数据
具体程序不在祥述,代码在代码目录中.
2.4.2历史订单详细资料查询
除了可以让用户查询以前消费的订单金额外,也可以让其查询每笔订单的详细资料,所以历史订单资料查询流程大致如下:
1)先从Request.Params("OrderId")取得OrderID
2)利用此OrderID取得每张订单的详细数据
3)将数据显示出来
具体程序不在祥述,代码在代码目录中.
2.4.3结束语
现在以将整个前台的系统完成,但需要我们不断不完善它.
第三章电子商店后端管理系统
3.1基本数据管理
一个电子商城系统,除了前台的用户操作界面外,更重要的就是后台的商理系统了,所以在接下来我们将着重论述后端数据库的维护,简单来说就是对数据库的数据执行添加,修改,删除,查询操作,通过查询的方法可以知道所输入的数据是否正确,通过添加的方法,可以往数据库中添加数据,通过修改的方法,可以把数据修改成正确的值,通过删除的方法,可以删除不必要的数据,这四种方法是数据库操作的基本的方法,也是开发应用程序在数据维护所必备的.我将分三部分:
1,商品类别数据维护
2,商品基本数据维护
3,供应商数据维护
如下图:这是一个商品后台管理的进入界面
3.1.1商品类别数据维护
商品类别数据维护就是通过查询具体某类别,在找到以后可以对其删除和进行修改,另外在做一个"添加数据"的按钮可以增加其中的类别.具体的程序在代码目录中,这里不详述.
3.1.2商品基本数据维护
功能与"商品类别数据维护"差不多,也是通过查询找到你要找的商品.然后再进行删除或修改的操作,然后加了一个"添加数据"的按钮可以增加每一类别的的商品.具体的程序在代码目录中,这里不详述.
3.1.3供应商数据维护
功能其实同上.具体的程序在代码目录中,这里不详述.
3.1.4结束语
在这节中的三个功能模块表达了进,销,存中的重要的三种数据,也是一般MIS系统中常见的程序.
3.2交易数据管理
交易是一家公司的重要的记录,也是公司赚钱的来源,交易数据维护包含订单数据维护和数据维护.
3.2.1订单,数据维护
订单数据维护是MIS最主要的一个程序,没有订单公司就无法生存,所以订单程序也是所有MIS人员必须学习的一个程序.
数据结构包含表(supplierDetail),暂存表(suppliertime),供货商基本表(supplier),单号表(outputsupplier).
其流程如下:
Click订单资料维护——>,选取相关信息——>,按"查询"——>,按"转发"——>,结果放在DataGrid上——>,订单取消可以把所有的项目删除/按"删除"可以把所选的清除/按"订单确认"来转发
3.2.2数据维护
数据维护其流程如下:
Click数据控制——>,选取相关数据然后"查询"——>,按一下"详细"即可看到详细的数据
3.2.2结束语
在传统的交易下会有进货和,但需要费用,现在我们用虚拟的商城来做为商店,省去了一般的商店需要租场地的费用,及利用了网络无极限的概念,只需通过下订单给供应商,然后有供应商来帮我们给客户,以达到零库存的目的.
第四章电子商务网站的安全技术
完成电子商务网站的设计只是完成我们工作的第一步,接下来我们将谈论电子商务网站的安全的技术.
4.1程序本身的完善
4.1.1数据库的安全
1)配置Web.config文件,将数据库连接直接写入其中,然后在外面程序加以调用,具体方法为:
在<,configuration>,之间加
1,Access数据库
<,appSettings>,
<,addkey等于"DSN"value等于"Provider等于Microsoft.Jet.OLEDB.4.0,DataSource等于C:\Ipub\sample\estore\Estore.mdb"/>,
<,/appSettings>,
2,SQLServer2000数据库
<,appSettings>,
<,addkey等于"DSN"value等于"server等于localhost,database等于Pubs,uid等于ueytjdf,pwd等于doekdf/>,
<,/appSettings>,
在外部引用方法为:
DimconnAsOleDbConnection等于newOleDbConnection(ConfigurationSettings.AppSettings("DSN"))
DimcoonAssqlConnection等于newsqlConnection(ConfigurationSettings.AppSettings("DSN"))
这样即使你的源程序被别人下载,也没关系,别人无法知道你的数据库在哪里.
2)第二种方法就是修改数据库的后缀名(Access数据库测试成功),比如将*.MDB改为*.asp别人如果下载到你的数据库,他也打不开,因为这是不可逆.
4.1.2模块封装
将一些重要的程序功能模块写成VB或C#文件,然后编译成dll文件,再在以后的文件中调用.现在我举一个例子(firstControl.vb):
ImportsSystem
ImportsSystem.Web.UI
NameSpaceECntrol
PublicClassFirstControls
InheritsContorl
ProtectedOverridesSubRender(PrintfAsHtmlTextWriter)
Printf.Write("<,center>,<,h2>,笔者的第一个控件练习<,/h2>,<,/center>,")
EndSub
EndClass
EndNameSpace
编译程序:
Setdestdir等于等.\bin\etrol.dll
Setpdir等于C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\system.web.dllsystem.dll
/T:LIBRARY/R:%pdir%/OUT:%destdir%firstcontrol.vb
这是一个在Dos环境下执行的程序,变量DESTDIR是编译后的DLL文件存放的地方,而Compdir是.NET函数存放的地方,是VB编译指令(CSC是C#的编译指令),/T是调用library,/r调用.函数,/out调用输出存放地,最后是引用要编译的文件名.
接下来是在*.aspx文件中引用.DLL文件,如下:
<,%@RegisterTagprefix等于"e"NameSpace等于"ECntrol"Assembly等于"ECntrol"%>,
<,e:Firstcontrolrunat等于"server"/>,
在引用时要使用TagPrefix和Namespace,关于TagPrefix,在此定义为:"当您要使用控件在另一个网页上的方法,这个命名方式任由用户选择",而namespace则是在网页上要引用的控件里的namespace的名称.在网页引用控件之后,其使用方法为<,TagPrefix:Class等../>
4.1.3网上跟追
再一个方面是做网上跟踪系统.就像各超级市场装电子眼一样,我们必须对每一位顾客的行踪有一定的了解.但跟踪系统也局限于对顾客个人公开场合的一些基本资料的跟踪,保护顾客的绝对隐私权.跟踪资料包括用户名,目前所处的位置,上网时间即可.
以下是我做的一个C#的在线用户的检测:
#define_debug
namespaceSoholife
{
usingSystem,
usingSystem.Data,
usingSystem.Data.SqlClient,
usingSystem.Collections,
usingSystem.Threading,
usingSystem.Web,
usingSystem.Diagnostics,
//定义了一个结构
publicstructUser
{
publicstringname,
publicDateTimelasttime,
publicDateTimecurtime,
publicstringsessionid,
publicstringiswhere,
}
//定义在线用户类
publicclassOnLineUser
{
privatestaticArrayList_alluser,//定义用户
publicArrayListalluser
{
get{return_alluser,}
set{_alluser等于value,}
}
publicOnLineUser()//构造函数
{
if(_alluser等于等于null)
{
_alluser等于newArrayList(),
}
}
//功能说明:将当前用户加入在线列表
//如果该用户的数据当前仍然在在线列表中,则暂时先不让该用户登陆,提示用户存在
publicboolAddUserToOnLine(Useruser)
{
//需要先判断用户是否已经在用户列表中了
if(_alluser等于等于null)
{
_alluser.Add(user),
return(true),
}
else
{
for(inti等于0,i<,_alluser.Count,i++)
{
//循环判断用户是否已经存在
Soholife.Usertempuser等于(Soholife.User)_alluser[i]
if(tempuser.sessionid.Equals(user.sessionid)&,&,tempuser.name.Equals(user.name))
{
return(false),//用户已经存在,则直接退出
}
}
_alluser.Add(user),
return(true),
}
}
//功能说明:判断某用户是否在线,本部分暂时不用
//返回值:TRUE代表在线,FALSE不在
publicBooleanIsUserOnLine(stringname)
{
//需要先判断用户是否已经在用户列表中了
if(_alluser等于等于null)
{
return(false),
}
else
{
for(inti等于0,i<,_alluser.Count,i++)
{
//循环判断用户是否已经存在
Soholife.Usertempuser等于(Soholife.User)_alluser[i],
if(tempuser.name.Equals(name))
{
return(true),
}
}
return(false),
}
}
//功能说明:更新用户在线时间
//返回值:最新的在线用户列表
publicBooleanCheckUserOnLine(stringname)
{
//需要先判断用户是否已经在用户列表中了
if(_alluser!等于null)
{
for(inti等于0,i<,_alluser.Count,i++)
{
Soholife.Usertempuser等于(Soholife.User)_alluser[i],
//先判断当前用户是否是自己
if(tempuser.name.Equals(name))
{
//更新用户在线时间
tempuser.curtime等于DateTime.Now,
alluser[i]等于tempuser,
return(true),
}
}
}
return(false),
}
}
publicclassCheckOnline//下面开始建立守护线程类:
{
constintDELAY_TIMES等于5000,//定义执行的时间间隔为5秒
constintDELAY_SECONDS等于30,//将用户掉线时间设置为30秒
privateThreadthread,//定义内部线程
privatestaticbool_flag等于false,//定义唯一标志
publicCheckOnline()
{
if(!_flag)
{
_flag等于true,
this.thread等于newThread(newThreadStart(ThreadProc)),
thread.Name等于"onlineuser",
thread.Start(),
}
}
internalvoidThreadProc()
{
while(true)
{
Soholife.OnLineUsertemp等于newSoholife.OnLineUser(),//定义一个用户对象
for(inti等于0,i<,temp.alluser.Count,i++)
{
Usertmpuser等于(User)temp.alluser[i],
//我是将该用户的最新时间加上80秒,然后和当前时间比较,小与当前时间,
//则表示该用户已经掉线,则删除他的记录
if(tmpuser.curtime.AddSeconds(DELAY_SECONDS).CompareTo(DateTime.Now)<,0)
{
temp.alluser.RemoveAt(i),
}
}
Thread.Sleep(DELAY_TIMES),
}
}
}
}
4.2IE的设置
4.2.1COOKIES技术
1),在登录时我们使用的Cookie,它将用户登录的用户名和做一个记录,您也可以在硬盘上查找Cookie的文本文件,从而打开Cookie.InterExplorer将站点的Cookie保存在文件名格式为<,user>,@<,domain>txt的文件中,其中<,user>,是您的帐户名.例如,如果您的名称为mikepope,您访问的站点为contoso.,那么该站点的Cookie将保存在名为mikepope@contoso.txt的文件中.(该文件名可能包含一个顺序的编号,如mikepope@contoso[1].txt.)
因此在别人使用你的电脑时,他很容易得到你的用户名,要消除Cookie对用户的威胁我们可以在用户登录我们的页面时将用户名和设置为立即过期,删除Cookie(即把该Cookie从用户的硬盘上物理删除)是修改Cookie的一种形式.由于Cookie位于用户的计算机中,所以您无法直接将其删除.但是,您可以让浏览器为您删除Cookie.修改Cookie的方法前面已经介绍过(即用相同的名称创建一个新的Cookie),不同的是将其有效期设置为过去的某个日期.当浏览器检查Cookie的有效期时,就会删除这个已过期的Cookie.所以,删除Cookie的方法与创建该Cookie的方法是相同的,只不过要把其有效期设置为过去的某个日期.以下示例比删除单个Cookie要稍微有趣一些,它使用的方法可以删除当前域的所有Cookie:
DimiAsInteger
DimcookieNameAsString
DimlimitAsInteger等于Request.Cookies.Count-1
Fori等于0Tolimit
aCookie等于Request.Cookies(i)
aCookie.Expires等于DateTime.Now.AddDays(-1)
Response.Cookies.Add(aCookie)
Next
也可以删除单个Cookie值,如:
Response.Cookies("TestCookie").Value等于"ok"
Response.Cookies("TestCookie").Expires等于DateTime.Now.AddMinutes(-1)
只要将DateTime.Now.AddMinutes(-1)中数设置为负数即可.
2),第五个非常重要的安全方法是对IE本身的设置,其实美国已经明令将IE中的Cookie功能关掉,因为这个东西对用户的资料太暴露了,但中文版的IE还没有这方面方展的趋势,这大概是因为中国光盘盗版太严重的原因吧.因此我们只好自己动手将Cookie关掉了,一种是对IE软件进行设置,方法:
如果你的浏览器是IE6.X版过程是:选取菜单中的"工具/Inter选项",待出现"Inter选项"窗口时,选取"隐私"选项卡,接着按下"高级"按钮,待出现"高级隐私策略设置"窗口时,选中"覆盖自动cookie处理",接着如果要关闭Cookie,则是选取"第一方Cookie"底下的"拒绝"及"第三方Cookie"底下的"拒绝".
如果你的浏览器是IE5.X版,过程是:选取菜单中的"工具/Inter选项",待出现"Inter
选项"窗口时,选取"安全性"选项卡,接着按下"自定义级别"按钮,待出现"安全性设置"窗口是,卷动卷轴到Cookies的位置,接着如果要关闭Cookie,则是选取"禁用"按钮.
另一种为编写程序,方法:
在web.config文件中加入以下程序:
<,configuration>,
<,systemweb>,
<,sessionStatemode等于"InProc"cookieless等于"false"/>,
<,/systemweb>,
<,/configuration>,
这样设置只是对其中的一个文件目录有效,如果需要关闭Cookie还是建议用第一种方法.
4.2,2IE的安全设置
第六个方面也是IE方面的.相信大家有些经常上网的人会有一些感受,比如你在一家会员网站上
二次输入你的用户名的第一个字符时,后面的字符也随之跳出,然后输入用户名后也跟了出来.引起这个原因的罪魁祸首是form表单,因为我们做用户登录程序时采用的Form-base验证,而IE默认设置是保存用户名和的.如果想取消可以采用以下方法:浏览器是IE6.X版过程是:选取菜单中的"工具/Inter选项",待出现"Inter选项"窗口时,选取"内容"选项"/自动完成",待出现"自动完成设置"窗口后,勾掉"表单上的用户名和"的选项框就可以了.
社2003年8月第1版附录A系统使用说明:
我将代码放在代码库中,用windowsxp,windows2000,windowsserver2003的的操作系统,需要装IIS5.0或IIS6.0加.NETFrameWorkSDK即可运行,首页为index.aspx,管理员用户名:whz_35,:876321.(需要将manage目录设置为"默认应用程序")
电子商务网站整体结构及安全技术论述
5