用ASP实现WEB页面分用户权限的访问

---（文/甘冀平）
问题的引出
前几日上网，看到有网友在电脑报论坛的ASP版提出如下的问题：“我试着用ASP的方法为网页设置了口令，但 是用户只要知道下一步链接的文件名， 就可以在地址栏输入该文件名而绕过口令文件直接浏览该文件。 怎样才能达到真 正加密的目的：如果不输入口令、用户名就无法浏览网页？”
上面的问题，是在基于Internet/Intranet的网络中开发WEB应用时，经常要涉及的一个方面。对于用ASP开发的 应用，根据个人经验，解决上面的问题，一般有2种方法，分别详细介绍如下：
例程说明
为说明方便起见，以下各方法假设针对如下的例子：
服务器IP地址为192.188.188.188；在服务器上开设一个虚拟目录：/mytest，所有测试文件均位于此路径下；
主文件为myindex.asp，用户首要登录文件为mylogin.asp；测试的合法用户名为mytest,口令也为mytest。
解决方法１
－ 编写mylogin.asp内容

    < %@ Language=VBScipt % >
    < @Response.Buffer=true% >
    < html >< head >< title >用户登录< /title >< /head >
    < body >
    < %
    if request("username")="mytest" and request("password")="mytest" then
    response.redirect "myindex.asp"
    end if
    % >
    < font style="font-size:11pt" >请输入登录用户名称与口令"< /font >< br >
    < form action="mylogin.asp" method="post" >
    < br >用户名称：< input type=text name="username" >
    < br >用户口令：< input type=password name="password" >
    < br >< input type=submit value="登录" >
    < /form >
    < /body >< /html >

－ 编写一个ASP包含文件，名字为myrefer.asp

    < %@ Language=VBScipt % >
    < @Response.Buffer=true% >
    < %
    myvaild=instr(lcase(request("HTTP_REFERER")),"http://192.188.188.188/mytest")
    if myvaild=0 then
    response.redirect "mylogin.asp"
    end if
    % >

－ 修改目录下的其他ASP文件头
修改目录下的其余ASP，在每个ASP文件的头部，都添加如下的代码：

    < %@ Language=VBScipt % >
    < !-- #include file="myrefer.asp" -- >
    '以下为原文件内容
    ......

解决方法２
- 编写global.asa文件
编写global.asa文件，放置在虚拟目录http://192.188.188.188/mytest/下，为了达到用户登录检查的目的， 只修改其中Session_OnStart的部分。

    　　 ......

    　　< Script RUNAT=Server Language=VBScript >

    　　Sub Session_OnStart

    　　mystartpage="/mytest/mylogin.asp"
    　　mycurrent=lcase(request("SCRIPT_NAME"))
    　　if strcomp(mycurrent,mystartpage) then
    　　response.redirect mystartpage
    　　end if

    　　End Sub

    　　< /Script >
    ......

总结 　从以上2种实现方法可以看出，第2种比较简单，但需要有单独的虚拟目录，这样才能编写global.asa文件使其 生效；第一种方法，虽然代码比较多，但不是所有文件都必须在虚拟目录中，这对于申请个人主页的用户，是比较可行的 一种方法。