基于ASPNET的网上论坛系统的设计与实现.docx
- 文档编号:26736689
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:12
- 大小:24.05KB
基于ASPNET的网上论坛系统的设计与实现.docx
《基于ASPNET的网上论坛系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于ASPNET的网上论坛系统的设计与实现.docx(12页珍藏版)》请在冰豆网上搜索。
基于ASPNET的网上论坛系统的设计与实现
网络通讯与安全
本栏目责任编辑:
冯蕾
1引言
随着Internet技术的飞速发展,论坛随之产生,已经成为网络上不可缺少的交流方式之一,深受网民的喜爱。
“网上论坛”是In-
ternet上的一种信息服务系统,
它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法,可以让来自世界各个角落的用户针对某个主题进行讨论,如此便可以达到集思广益的效果。
ASP.NET是微软公司的ASP和.NETFramework这两项核心技术的结合,功能强大、技术非常灵活,适合于编写动态Web页面。
因此,本文选择ASP.NET技术来构建论坛系统,采用SQLServer2000数据库管理系统作为数据库服务器,客户端通过IE或其它WWW浏览器来使用系统所提供的所有功能。
2系统设计
2.1系统设计目标
(1三层结构设计:
本系统的程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。
三层在实际的物理结构上也是独立的,用户界面与业务逻辑分离,系统的安全性、可维护性、重用性和扩展性都大大提高。
(2面向对象设计:
系统中将文章、用户信息等都封装成相应的类,从而再次提高了对数据库操作的安全性和程序的可扩展性。
(3人性化设计:
系统界面设计充分考虑到用户上网习惯,从简单实用出发,易于操作。
2.2系统功能模块设计
将系统功能分为前台和后台两大类,设有注册用户和管理员两种用户权限,分析该网上论坛系统主要包括的功能如图1所示。
图1系统功能模块图
之所以把属于管理员权限的管理帖子模块归于前台,是因为考虑到对于一个论坛系统而言,帖子是最主要的。
为了方便管理,管理员需要一边浏览查看一边进行管理,管理时需要了解帖子的详细内容,以及相关回帖信息,因此将帖子的管理界面融合在前台的浏览界面中。
其他的模块,则是完全根据用户权限进行划分的。
图2系统E-R图
2.3数据库设计
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接影响应用系统的效率及实现的效果,合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。
(1数据库概念结构设计。
考虑到论坛中各个对象的相互关系,帖子属于版块,回复帖从属于主题帖,帖子的作者属于用户,因此版块、主题帖、回复帖是一层层的从属依赖关系,帖子的作者必定是论坛的用户,帖子不能脱离版块、用户而单独存在。
系统的E-R图主要设计如图2所示。
(2数据库逻辑结构设计。
确定了论坛有哪些数据表及其关
收稿日期:
2006-09-01作者简介:
唐伟(1973-
男,江苏阜宁人,讲师,硕士,主要研究方向为软件工程与数据库技术。
基于ASP.NET的网上论坛系统的设计与实现
唐伟
(南京审计学院信息科学学院,江苏南京210029
摘要:
随着Internet技术的发展,论坛已成为网络上不可缺少的交流方式之一。
在介绍了系统的设计目标、功能和数据库设计方案之
后,结合ASP.NET的开发环境阐述了系统的实现方法。
利用ASP.NET技术开发的网上论坛系统,
实现了网上论坛的动态管理,使得对信息的管理更加及时、高效,方便用户及时上网浏览有用信息,发表自己对相关问题的看法。
关键词:
网上论坛;ASP.NET;SQLSERVER2000;数据库;ADO.NET;连接池中图分类号:
TP311文献标识码:
A文章编号:
1009-3044(200632-0070-02
DesignandImplementationofBBSSystemBasedonASP.NET
TANGWei
(InformationScienceSchool,NanjingAuditUniversity,Nanjing210029,China
Abstract:
WiththedevelopmentofInternettechnology,theBBShasbecomeanecessarycommunicatingmodeinthenetwork.Systemdesignobject,systemfunctionsanddatabasedesignschemesareintroducedfirstly,andthenastatementoftherealizingmethodswiththedevel-opingenvironmentofASP.NETismaked.TheBBSsystemdevelopedbyASP.NETrealizesthedynamicmanagement,andmakestheinfor-mation'smanagementmoretimelyandefficiently,sotheuserscanlookthroughthepagesconvenientlyandaddressideasaccordingtorelatedquestions.
Keywords:
BBS;ASP.NET;SQLSERVER2000;Database;ADO.NET;
Connection
Pool
网络通讯与安全本栏目责任编辑:
冯蕾
系,就可以开始设计每个表的具体结构。
3系统的实现
3.1开发环境
(1操作系统:
Windows2000Server及以上服务器版本;
(2数据库管理系统:
SQLServer2000;
(3Web服务器:
InternetInformationServices(IIS;
(4编程工具:
编程软件为VisualS2003,使用ASP.NET作为网络编程开发框架,编程语言选用C#。
ADO.NET提供两个核心组件:
DataSet和DataProvider,通过ADO.NET可以从数据操作中分解出数据访问。
ADO.NET两种组件问的关系如图3所示。
图3ADO.NET结构示意图
3.3数据库连接
第一步,创建一个C#“ASP.NETWeb应用程序”项目,取名为“sampleForum”。
第二步,添加Web自定义用户控件,具体步骤如下:
(1解决方案资源管理器中建立目录SetData;
(2在目录中单击鼠标右键,从弹出的快捷菜单中选择[添加]命令;
(3选择[添加Web用户控件]命令;
(4输入控件文件名connect_strings.ascx,用鼠标右键选择[查看代码]命令进行编码,主要代码如下:
{publicstringSqlConnectionString
{get{return"Server=BBS;DataBase=DBBS;Pwd=123;Uid=tw;MaxPoolSize=50;MinPoolSize=5";}}}
在用户自定义控件当中定义了SqlConnectionString属性,对应的是.NET数据提供程序下的连接字符串。
连接字符串定义了数据库服务器的名称是BBS,数据库的名称是DBBS,用户名是tw,用户密码是123。
由于系统在多个页面都需要访问数据库,因此将连接字符串定义在用户自定义控件中,实现了软件代码的复用。
第三步,实现数据库的连接,在需要访问数据库的页面中进行编码。
代码如下:
publicstaticstringSQLCONNSTRING
{get{connect_stringsoConn=newconnect_strings(;
returnoConn.SqlConnectionString;}}
SqlConnectionoConn=newSqlConnection(SQLCONNSTRING;
oConn.Open(
以上代码的作用是获取连接字符串的值,将用户自定义控件中的连接字符串赋给字符型变量SQLCONNSTRING,然后新建连接oConn,通过oConn的open方法连接到数据库。
3.4程序性能的优化
作为一个ASP.NET开发者,网站的性能是至关重要的,没有良好的性能就无法满足数以百万计用户访问的庞大要求。
在本系统设计中主要使用了如下的代码优化方法。
在系统中,将重复使用的属性和方法定义成类或组件,如上述的connect_strings用户自定义控件就是一个组件。
在.NET平台的组件层中,组件是以Assemblies的形式创建的,它是一段可调用的程序集;使用组件时,需要做的仅仅是添加对那个程序集的引用。
类是C#语言实现面向对象程序设计的基础,它是封装的基本单元,把对象、属性、和方法这些类成员封装在一起构成一个有机整体。
需要时我们可以直接调用“类”,本系统定义了一个用户类“LoginC”,存放在Code目录下面的Forum_BusObj.cs文件中,用于验证用户登录等操作,下面列举了验证登陆的函数代码。
publicclassLoginC
{//论坛验证登陆
publicboolcheckLogin(stringLoginName,stringPWD,stringstr-Conn
{stringsql="selectcount(*asfintLoginCountfromT_OperatorwherefchrLoginName='"+LoginName+"'andfchrPassWord='"+PWD+"'";//定义查询的字符串
SqlConnectionoConn=newSqlConnection(strConn;//新建一个连接
oConn.Open(;//连接数据库
SqlCommandoCommand=newSqlCommand(sql,oConn;//新建一个命令对象
SqlDataReaderoReader=oCommand.ExecuteReader(;//创建DataReader对象,执行sql命令
while(oReader.Read(//读取查询的结果
{if(oReader.GetInt32(0==0
{returnfalse;//验证失败}}
oReader.Close(;//关闭DataReader对象
oConn.Close(;//关闭数据库连接
returntrue;//验证成功}}
代码中定义了一个LoginC类,在其中添加一个checkLogin函数作为用户登录的验证方法,注册用户和管理员登录论坛都可以通过调用类的checkLogin方法来实现。
该方法的编程思想是:
连接到数据库后,新建一个DataReader对象oReader,通过该对象执行查询命令,具体是在T_Operator中查询符合所输用户名和密码的记录,然后用oReader对象读取查询的结果,如果读取的内容为空,则当前为非法用户,反之为合法用户。
数据库连接池是目前改善程序数据访问性能的重要手段,它的基本原理是预先建立若干数据库连接对象放入特定内存结构(称为池中,每次收到用户请求时便从池中取出一个连接对象交给用户使用,使用结束后并不真的关闭数据库连接,而是将它重新返回池中,如此就可以循环使用这些连接对象,避免反复建立和关闭连接的系统开销。
由于数据库连接是极其重要和有限的资源,而反复地建立和释放连接造成了大量的开销和性能降低,产生性能瓶颈,采用数据库连接池技术可以有效地消除这个瓶颈,极大地改善数据库访问性能。
return"Server=BBS;DataBase=DBBS;Pwd=123;Uid=tw;MaxPoolSize=50;MinPoolSize=5";
设定连接池的初始连接数为5,最大连接数为50。
另外需要格外注意的是,使用连接池时,ADO.NET要求每次连接的连接串必须完全相同,否则将导致当前的连接池无效,而
(下转第171
页
开发研究与设计技朮本栏目责任编辑:
谢媛媛
(上接第71页
建立新的连接池,从而造成不必要的开销。
使用Page.IsPostback可以避免页面往返过程中没有必要的工作。
开发者往往将初始化的代码放入到page_load函数中,这样造成的结果是每次往返过程都将调用初始化代码。
Page.IsPostback的值为false时,表示是初次运行页面,需要初始化,否则无需进行初始化代码。
使用Page.IsPostback属性的系统代码结构如下:
privatevoidPage_Load(objectsender,System.EventArgse
{//在此处放置用户代码以初始化页面
if(!
Page.IsPostback{……}}
3.5论坛系统的运行
启动论坛系统应用程序,首先出现的是系统主页,如图4所示。
图4论坛系统主页
(1点击“注册”,便可进入到“新用户注册”页面,用于新用户注册为论坛合法用户。
(2点击“登录”,便可进入到“注册用户登录”页面,输入用户名、密码,单击“登录”按钮后,系统进行密码认证。
认证通过后,主页的“当前状态”显示为“已登录”,该用户可以执行注册用户权限范围内的所有操作。
(3在“已登录”的状态下,用户可浏览版块类别,选择相应的版块,点击“进入”,则打开“帖子列表”页面,此时用户即可查看该版块中的帖子、发表新的帖子、查看相应的帖子回复并发表新的回复。
(4点击“管理”,便可进入到“管理员用户登录”页面,输入用户名、密码,单击“登录”按钮后,系统进行密码认证。
认证通过后,进入“管理员”初始页,选择要进行的操作。
4结束语
该论坛系统已经开发完成,它具有朴素和谐的良好界面,操作简单,在多个客户端接入的情况下,都能迅速地完成操作任务;此外,由于ASP.NET应用程序已经过编译,从而系统执行速度快,并且整个系统非常稳定。
从中可以看出,ASP.NET技术将浏览器、网页、Web服务器、数据库、数据库服务器有机地连接起来,用它开发的在线论坛,可非常方便地实现Internet网上信息发布、信息交流和信息共享,而且很容易适应系统的不断变换和发展。
参考文献:
[1]唐伟,李希,徐大华.心脑血管疾病的规范化诊治系统的设计[J].微计算机信息,2005,21(12-3:
20-22.
[5]王华杰,李律松,孙一波,等.精通C#数据库开发[M].北京:
清华大学出版,2004.
起发送给客户。
客户端利用RSA算法产生两个素数p和q,计算n
以及自己的双密钥e
i和d
i
把(n,d
i
与随机数Rk通过一定的运算f
结合后产生h
i
=f(n,di,Rk,把用户名User_namei与hi一起提交给系
统。
e
i
则由用户自己保管,不能泄漏。
(3系统收到(User_namei,hi后,利用与f相反的运算f-1分
解h
i得到(n,d
i
保存用户的User_namei和(n,di信息。
第三阶段:
用户登录并与服务器进行双向认证。
(1用户端产生随机数RU,发出登录请求,发送(RU,Us-
er_namei到系统;
(2系统查询密码表,若无User_namei,则拒绝请求,若有,则利用该用户的(n,d
i
对随机数RU加密产生密文Ci=E(RU=RUdimodn。
系统产生随机数RS,并将(Ci,RS传送给该用户。
(3用户端收到(Ci,RS后,进行解密,还原明文为m=D(Ci=Cieimodn,将m与RU对比,若相同,则客户端通过对服务器的认证。
若不同,则说明是假冒的服务器。
(4用户用自己的(n,ei对随机数RS加密产生密文Ci'=E(RS=RSeimodn。
如果是假冒的用户,则不拥有正确的(n,ei,加密后的
密文不能通过服务器端的认证。
将C
i
'传送给服务器端。
(5服务器利用该用户的(n,di对Ci'解密,还原明文为m'=D(Ci'=Ci'dimodn,将m'与RS对比,若相同,则系统通过对该用户的认证。
若不同,则说明是假冒的用户。
4系统安全性分析
一些攻击者通过网上窃听的手段获取用户传输的信息并进行分析,以得到口令。
本方案中,在网上传输的是加密随机数后产生的密文,而不是口令本身。
如果密文被窃取到,根据大整数因子难分解性,根据密文难以得知密钥。
对于重放攻击来说,在认证过程中,网上传输的密文都是对随机数进行加密。
客户每次登录,客户端和服务器端都会产生新的随机数,所以即使攻击者获取了某次登录时的密文,进行重放攻击,服务器端解密后比较当前的随机数,就会发现它与当前随机数不同,进而拒绝其登录。
目前大多认证系统都是只对客户进行认证,这就使得一些攻击者通过假冒服务器来获取用户信息。
对于本系统,当攻击者假冒服务器与用户对话时,需要对用户端产生的随机数RU进行加密,假冒的服务器对随机数R
U
加密产生的密文C
i
=E(RU=RUdimodn必然是错误的,发回用户端以后,用户解密发现产生的明文m与RU不同,从而发现假冒的服务器。
从上述分析可以看出,本系统密文难以被破解,并且能够很好的防止假冒攻击和重放攻击,具有较高的安全性。
5结束语
本文提出了一种双向动态口令认证方案,介绍了该系统的设计原理和实现步骤。
通过安全性分析,可以看出系统具有较高安全性。
整个方案方便有效,易于实现。
参考文献:
[1]胡志远.口令破解与加密技术[M].北京:
机械工业出版社,2003.
[2]RivestR,ShamirA,AdlemanL.Amethodforobtainingdigi-talsignaturesandpublic-keycryptosystems[J].CommunitionsoftheACM,1976,21(2:
120-126.
[3]WilliamStallings.CryptographyandNetworkSecurityPrinci-plesandPractice(SecondEdition[M].Beijing:
PublishingHouseofElectronics
Industry.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ASPNET 网上 论坛 系统 设计 实现