北京10045信箱信息中心
王普全
在浏览器/服务器应用中,如果允许客户使用浏览器通过匿名身份访问网页,那么进一步限制客户访问具体的网页通常要客户表明身份(例如提示登陆),在网页初始部分验证客户的身份,如果通过身份验证,则可浏览到网页的具体内容,否则提示访问受到限制。
一般的浏览器/服务器应用应有一个主页,其上有进入不同网页的超链接。在Active Server Page应用中,我们知道,可以在进入主页时进行一次登录,把登录成功信息保存会话变量中,然后在进入该应用的其它网页时,只需检验这个会话变量,无需再做登陆验证。通常的做法是在每个网页的开始部分检验客户是否登录过,如果没有登录,转入登陆页完成登陆;如果登陆过,则显示网页内容。扩展这种检查,可以进一步检查不同的客户能否访问网页内容,如果无权访问,给出提示。不过这种在进入到具体的网页后才验证身份,对于无权访问该网页的客户来说就有一种进入死胡同的感觉。如果能够在超链接点击时即给予无权访问的提示,并且保持超
链接不向下进入,可以给客户一个更好的印象。
要做到这一点,首先要限制客户直接在地址栏输入受限网页的名字进入,保证客户从一公共入口网页(比如主页)进入,然后在链接受限网页的公共入口网页页上根据客户身份来确定他能否进入即可。限制的方法是设立一个网页可进入标志。如果客户从公共网页上进入,在公共网页上设立允许标志,在每个受限网页的开始部分检查这个标志,如果标志为不允许,说明客户企图直接在地址栏输入网页的名字进入,提示访问受限,不显示内容或转入登录网页。
另一项工作是在公共网页上检查其上的受限网页的超链接,如果允许客户进入,在进入受限网页检查完进入标志后,立即清除允许标志;如果不允许进入,点击超链接时给予提示。下面是源代码。
以下文件为受限网页,取名为page1.
asp < %@ Language=VBScript % >
< % if not Session("fromdefaultpage")
then //检查进入标志
Response.Write "不是从公共网页进入,不能浏览本页内容。"
Response.end
else
Session("fromdefaultpage")=false
//取消允许进入
end if
% >
< HTML >
< HEAD >
< META NAME="GENERATOR"
Content="Microsoft Visual Studio 6.0" >
< /HEAD >
< BODY >
< P >这是本页的正常内容。< /P >
< /BODY >
< /HTML >
以下文件为公共入口网页,取名为page.asp
< < %@ Language=VBScript % >
< % dim conn,rs,acl
set conn=Server.CreateObject("ADODB.Connection")
ConnectionString = "DSN=mssql;Description
=Microsoft SQL Server 7.0; SERVER=wwwserver;
UID=ddy;APP=vi6;WSID=WANGPUQUAN;DATABASE=webapp"
conn.ConnectionTimeout = 30
conn.Mode = 3
conn.Open Connectionstring,"ddy","2louddy"
set rs=conn.Execute ("select acl from
userlist where username=''u1''")
if not rs.EOF then
acl=rs(0)
end if
set rs=nothing
set conn=nothing
session("fromdefaultpage")=true % >
< HTML >
< HEAD >
< META NAME="GENERATOR"
Content="Microsoft Visual Studio 6.0" >
< script language=javascript >
function checkright()
{
var curElement=event.srcElement
if ("A"==curElement.tagName)
{
var ss="< % =acl % >"
var re=new RegExp(","+curElement.id+",","i"