前言:想要写出一篇引人入胜的文章?我们特意为您整理了用户满意度在线调查系统设计论文范文,希望能给你带来灵感和参考,敬请阅读。
1评选系统的设计
1.1系统结构设计
本在线调查系统基于B/S架构,采取分层设计,模块化实现的思路进行构建,以便于系统的维护与扩展。整个系统划分为在线评选子系统与管理子系统两部分,分别面向大量的匿名用户与少量的管理人员使用。在线评选子系统是整个系统的核心,通过系统前台页面对企业产品信息进行展示。由于前台页面访问量比较大,且其框架结构在运行期间几乎不会变化,因此采取了写静态技术来实现,以达到性能的最优化。后台管理子系统访问量比较小,主要包括企业产品信息管理,评选数据的管理以及评选系统的维护。由于系统参数数据量小,将其存放于系统配置文件中。
1.2评选交互设计
全省参评企业产品数量多,如果全部同时展示出来,一方面传输数据量太大,另一方面不方便用户浏览,直接影响着用户的使用体验,同时,与大规模用户访问进行交互,也影响着系统运行的稳定性,需要尽量减少用户交互的数据量。因此,对企业产品进行了分类分组,当用户选择某一类产品时,会按产品分类从后台数据库中提取数据。
1.3数据库的设计
数据库系统主要包括两个核心数据表:产品信息表与投票数据采集表,分别存放参评企业的产品信息与匿名评选人的投票记录。
2评选系统的实现
2.1匿名评选子系统的实现用户评选流程图
用户选择一个产品类别后,通过产品分类提取模块,产生一个Ajax的Get请求,从后台数据库中提取该分类的企业与产品信息。用户可以对产品进行评选,因为可以同时对多个产品进行同时评选,因此每选择一个产品时,即利用JavaScript程序进行检测与记录,选择结束后提交由后台程序进行处理。采取Ajax技术实现局部刷新,而不触发整个页面的回传,减少了网络数据传输量,显著提升系统性能以及用户操作体验。后台程序首先对验证码进行验证,另外,须对前台验证过的数据再次进行验证,比如一次评选产品数不能超过10个,以避免绕过前台检测的恶意攻击。为了防止用户重复评选,还需要对客户端的IP地址进行有效性验证。用户进行评选时,前台拼接提交的字符串,是通过分割符将多组所评选的产品编号与选项值分割后组成的,示例字符串形式如“产品编号1,选项值X;产品编号2,选项值Y;产品编号3,选项值Z;……”。后台服务器上运行的数据库存储时,也仅需要一条SQL语句就能完成批量插入操作,操作效率非常高,示例SQL代码如“INSERTINTOvotes(productid,option,ip)select字段值列表1UNIONSELECT段值列表2UNIONSELECT段值列表3……”。其中,字段值是由强类型变量传入的,productid字段与option字段均为整型数据,而ip字段为长整型数据,均不会导致SQL注入攻击。另外,ip字段定义为长整型数据要比定义为char(16)类型数据,在进行IP地址查询时效率高得多,特别在用户访问量大时,更容易体现其性能优点。后台对客户端IP地址的有效性验证,是通过投票记录表中IP记录实现的,示例SQL代码为“selectcount(*)fromvoteswheredatediff(day,votedate,getdate())=0andip=用户IP地址”。如果返回值与当前评选数之和大于10,则说明评选超过当天评选数,评选无效。
2.2后台管理子系统的实现
后台管理子系统主要提供给管理人员使用。通过后台管理系统,工作人员通过评选结果查看模块,实时查看企业产品的考评结果。可以按评分高低、所在区域等多种方式进行排序,也可以导出Excel格式的结果。在产品数据管理中,可以将Excel文件或文本文档中的原始数据,远程批量导入企业产品信息表中。通过系统参数设置模块,可以设置数据库链接字符串,恢复与备份数据库等。系统参数的存放,在基于ASP.NET技术进行开发时,存于web.config文件中,而基于J2EE技术开发时,则存于config.properties文件中。假设某企业产品的调查数据是满意为x,一般为y,不满意为z。那么该产品的用户满意度即等于(x×1.0+y×0.7)/(x+y+z)×100%。实现用户满意度计算的方式有多种,由SQL语句直接运算效率高且快捷,示例如下:语句1:SELECT*FROM(SELECTprodid,SUM(CASEWHENoption=1THEN1ELSE0END)ASopt1,SUM(CASEWHENoption=2THEN1ELSE0END)ASopt2,SUM(CASEWHENoption=3THEN1ELSE0END)ASopt3FROMdbo.votesGROUPBYprodid)astmp_A语句2:SELECTname,product,opt1,opt2,opt3,(opt1*1.0+opt2*0.7)/(opt1+opt2+opt3)AStotalFROMproductsLEFTOUTERJOINtmp_AONproducts.prodid=tmp_A.prodid语句1得到某产品满意度各类别计数值,并生成临时表tmp_A,语句2得到满意度计算结果,通过表products与表tmp_A联合查询,可以得到企业名称(name),产品名称(product)等信息,以及最终满意度计算结果(total)。语句1与语句2可以合并为一条语句完成计算查询。
2.3安全问题及解决方案
满意度在线调查系统采取的B/S结构,具有很强的开放性、共享性,这给网上投票系统带来了很多安全隐患。本系统采取的主要安全措施有session防护、验证码防护、IP地址限制等。在进行识别码验证时,服务器产生一个唯一的会话标识符。会话标识符可以采取cookie技术来存储,但是,如果用户的浏览器关闭了cookie的功能,将无法参与评选,因此采取session存储会话标识符。由于默认的session有效期为20或30min,当用户访问量大时,大量的会话消耗服务器端内存,会严重降低系统的性能。因此,可以设置ses-sion的失效期(timeout)为2min,且仅在用户向提交数据时创建session,这样既保证用户有足够的时间输入验证码,也保证了会话的及时关闭。在系统运行初始,通过后台管理页,曾发现投票数据出现两个可疑点:
①同一IP地址连续出现若干次后才开始变化;
②对同一产品的投票时间间隔非常短,统计结果平均约为30s,这在人工操作且需要输入验证码的情况下是难以完成的,由此认定是刷票的结果。防御自动投票软件的方法就是增加验证码识别难度。一般的验证码很容易被OCR软件破解,比如字迹比较清晰的数字图片等。另外还要防止系统出现漏洞:
①在每次投票时用户填写的验证码验证失败后,要及时更换,防止多次猜测同一验证码;
②在每次投票成功后,要及时清空服务器端session会话,否则易招致攻击者重复提交。
3结束语
本系统自从部署后,每年开通一次,每次在线调查历时约半个月,累计接受访问量约30万人次,参评约8万人次。在线调查期间,该系统经受住了复杂网络环境的考验,运行比较平稳。通过引入高难度的验证码方案,有效预防了自动化程序的攻击。但是,由于一些网络水军的存在,对在线评选活动造成很大冲击。这些所谓水军是网络上分散在各地方的人,有组织有预谋地进行投票,尽管政府与网络运营商共同对网络水军进行封杀,但依然没有更有效的措施进行预防。如何抵御网络水军的干扰,将是下一步研究的课题。特别鸣谢:河南省质量技术监督局质量管理处(省防伪办公室)宋松林处长和石笑宇主任提供的帮助。
作者:杨省伟 单位:河南质量工程职业学院