ASP網頁訪問權的控制

來源:互聯網
上載者:User
在瀏覽器/伺服器應用中,如果允許客戶使用瀏覽器通過匿名身份訪問網頁,那麼進一步限制客戶訪問具體的網頁通常要客戶表明身份(例如提示登陸),在網頁初始部分驗證客戶的身份,如果通過身分識別驗證,則可瀏覽到網頁的具體內容,否則提示訪問受到限制。

   一般的瀏覽器/伺服器應用應有一個首頁,其上有進入不同網頁的超連結。在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")
if (ss.search(re) >=0)
{
alert("由於許可權不足,不能訪問此頁!")
return false
}
else
{ return true }
}
}
< /script >
< /HEAD >

< BODY onclick="return checkright()" >
< p >這是公用入口頁,在點擊文檔內容區時,
文檔的onclick事件將檢查點擊的是否超連結,
如果是,將進一步檢查其id是否在禁止訪問的列表(,page1,page2,page3,)
中,如果在列表中,提示訪問受限,不許進入;
如果不在列表中?佇斫搿?lt; /p >
< P >< a id=page1 href= Page1.asp >
為了限制page1.asp被訪問,此處設定id為page1,
點擊此超連結不能進入 < /a >< /P >
< P >< a id=page5 href= Page1.asp >
如果不限制page1.asp環夢剩瓚╥d為page0,
點擊此超連結可以進入 < /a >< /P >

< /BODY >
< /HTML >
   page.asp的說明:
   一、 為了節省篇幅,此文省略了登入網頁,查詢存取權限時使用了名為u1的使用者名稱。

   二、 使用者權限資料庫表結構如下:

   欄位名 欄位類型 欄位描述
   username char(10) 使用者名稱
   password char(10) 口令
   acl varchar(1800) 禁止訪問列表
   三、 acl欄位中儲存禁止訪問的ID列表,此例中對應使用者u1的acl值為",page1,page2,page3,"。
   四、 為了便於管理,可以把ID取作禁止訪問的網頁的檔案名稱,超連結標記的ID與引用的網頁檔案名稱相同即可。此例中為簡便起見,兩個超連結引用了相同的網頁,但分配了不同的ID值,其中page1在禁止訪問列表中,因而不可訪問,page0不在禁止訪問列表中。

   此例中是在每次進入公用入口頁中尋找存取控制清單,這樣做的代價是頻繁訪問資料庫。實際上可以在首次訪問該頁時把取出的acl值儲存在會話變數中,在會話結束前再次訪問只需訪問會話變數即可,不過這樣做在使用者較多時伺服器需要較多的記憶體來儲存這些變數。可以視實際情況決定使用那一種方法。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.