在ASP應用中驗證使用者身份(2)

來源:互聯網
上載者:User
二、初始化以及使用者輸入合法性檢查

   當一個ASP應用啟動的時候,IIS就會尋找一個global.asa檔案。如果該檔案存
在,就開始執行Application_onStart。在這裡可以初始化應用級的變數和常量。下
面的代碼在Application_OnStart中初始化一個數組來跟蹤任意時刻登入系統的所有
使用者:

Sub Application_OnStart
Application("Users") = Array()
End Sub

   在執行Application_OnStart之後,ASP引擎建立一個Session對象並初始化
SessionID,然後觸發Session_OnStart事件。在這裡可以初始化會話級(和特定用
戶相關的)變數和常量:

sub Session_OnStart
Session.Timeout=1
' 資料庫DSN
Session("ConnectionString") = "ASPSecurity"
Session("ConnectionTimeout") = 15
' 讀/寫方式
Session("Mode") = 3
end sub

   考慮到使用者的瀏覽器可能不支援Cookies或關閉了Cookies功能,因此必須在第
一個ASP頁面中檢查Cookies的支援情況並把結果儲存在一個Session變數中。此外,
當使用者在登入頁面中單擊“登入”按鈕,還應該檢查使用者輸入的合法性,如下面的代
碼所示,其中ASPSecurity.inc提供一些公用函數(如signUserOn用於驗證使用者身
份):

< %@ Language=VBScript %>
< % option explicit %>
< % Response.buffer = true %>
< !-- #INCLUDE FILE="ASPSecurity.inc" -->
< %
dim aSignon
dim aPassword
dim dataValidated
dataValidated = false
' 檢查瀏覽器是否支援Cookies
Session("SupportsCookies") = (instr(1, Request.ServerVariables
("HTTP_COOKIE"), "ASPSESSIONID", vbTextCompare) > 0)
if Request("Action") = "登入" then
aSignon = lcase(trim(Request.Form("Signon")))
aPassword = lcase(trim(Request.Form("Password")))
if len(aSignon) = 0 then
Session("msg") = "請輸入使用者名稱字."
end if
if len(aPassword) = 0 then
Session("msg") = "請輸入密碼."
else
dataValidated=true
end if
if dataValidated then
if signUserOn(aSignon, aPassword) then
' 使用者身份被證實,允許進入受保護頁面
Response.Redirect "signedOn.asp?ID=" & Session("ID")
end if
end if
elseif Request("Action") = "註冊" then
Response.Redirect "register.asp"
end if
%>


   對於註冊頁面,除了要檢查使用者是否完整地輸入所有內容之外,還應該檢查兩次
輸入密碼是否相同、使用者名稱字是否與資料庫中已有記錄衝突等。實現代碼請參見本文
所附的ZIP檔案。

   由於使用者每次啟動瀏覽器串連到伺服器時SessionID都是不同的,所以不能直接
用它來關聯使用者與儲存在資料庫中的相關資訊,但SessionID可以用來臨時地標識從
資料庫或檔案提取的使用者資訊。對於那些不支援Cookies的瀏覽器,可以用另外的方
法來建立唯一ID,如下面的getID使用的是隨機函數:

function getID() dim numbers
dim letters
dim I
dim ID
Randomize
numbers="0123456789"
letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for I = 1 to 10
if I mod 2 <> 0 then
ID = ID & mid(letters, Int((26 * Rnd) + 1),1)
else
ID = ID & mid(numbers, Int((10 * Rnd) + 1),1)
end if
next
getID = ID
end function


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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