当前位置:首页 > 综合

asp网站建设

ASP这东西,站建现在提起来多少有点考古的站建味道。但你要是站建手头有个老项目要维护,或者老板突然扔给你一个2005年的站建源码让你改,不懂它还真不行。站建我上个月就接了个活儿,站建一个本地企业的站建内部管理系统,全站ASP+VBScript,站建数据库是站建Access。服务器是站建Windows Server 2003,对,站建就是站建那个默认只支持IE6的版本。

先说清楚,站建ASP不是站建ASP.NET。前者是站建Active Server Pages,解释型脚本,混在HTML里跑;后者是编译型框架,完全是两码事。很多人一听ASP就皱眉,觉得老掉牙、不安全、性能差。这些说法都对,但有个前提——你得看它跑在什么场景下。一个日访问量不到五百的内部工具,用ASP写和用Django写,实际体验差不了多少,但部署成本差出十倍。

环境搭起来比想象中简单

IIS管理器里勾选“ASP”功能,把默认文档加上index.asp,基本就能跑了。真正烦人的是权限。Access数据库文件放在网站目录下,IIS的匿名用户得对它有写权限。很多人卡在这一步,报“操作必须使用一个可更新的查询”,其实就是NTFS权限没给够。右键数据库文件→属性→安全→添加IUSR和IIS_IUSRS,给修改权限。这事儿我见过不下二十个人踩坑。

连接字符串别写死。我习惯用Server.MapPath定位数据库,再拼成相对路径。像这样:

dim conn, dbpath dbpath = Server.MapPath("/data/mydb.mdb") set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath

注意Jet引擎只认32位,64位系统上要么开32位兼容模式,要么换ACE驱动。我一般直接建议客户用32位应用程序池,省事。

写代码时最烦的是引号和转义

VBScript里双引号用两个双引号表示,HTML属性里再套一层,眼睛都能看花。有回改一个表单提交页面,光调一个onclick里的字符串拼接就花了半小时。后来我学乖了,复杂的逻辑全扔到单独的函数里,页面里只留简单的调用。

Request对象是双刃剑。Request.Form和Request.QueryString混用容易出乱子,我见过有人直接Request("id"),结果GET和POST的值打架。明确写清楚来源,调试时能省一半时间。还有Request.ServerVariables,拿用户IP、浏览器信息都靠它,但别信HTTP_X_FORWARDED_FOR,那玩意儿能随便伪造。

安全是个绕不过去的坎

SQL注入在ASP时代是重灾区。拼接SQL字符串等于把大门钥匙插在锁上。参数化查询?ADO的Command对象支持,但写起来啰嗦,很多人图省事直接拼。我接手过的老代码里,十个有八个能直接用'or'1'='1绕过去。后来我养成了习惯,所有用户输入先过一遍过滤函数,数字型强制转Clng,字符串型替换单引号。虽然土,但管用。

还有上传漏洞。ASP的上传组件五花八门,有些老组件默认允许上传.asp文件,传上去就能执行。我一般把上传目录的脚本执行权限关掉,IIS里右键文件夹→处理程序映射→编辑功能权限→取消“脚本”。这招比任何代码过滤都实在。

性能优化别想太多

ASP没有真正的连接池,每次CreateObject都实打实开一个。所以能复用就复用,页面底部记得conn.Close,set conn = nothing。但别为了省资源把连接塞进Application对象,并发一上来就锁死。我试过,五十个人同时提交表单,Application锁得死死的,页面直接超时。

Session也是。默认20分钟超时,用户填个长表单回来发现登录没了。我一般改成60分钟,再配合Cookie做个自动续期。但Session变量别存大对象,存个用户ID和权限级别就够了,存Recordset?那是跟自己过不去。

最后说句实在话。ASP现在就是维护性技术,新项目别碰。但如果你手上正好有这么个东西,别急着推翻重写。读懂它、改好它、让它再跑两年,比推倒重来省钱得多。我那个Access项目,改完到现在跑了三个月,零故障。老技术有老技术的稳,前提是你得知道它的脾气。

分享到: