ASP中簡易使用者存取控制(1)

來源:互聯網
上載者:User

在網站的頁面之間傳遞參數的通常方法是通過URL查詢字串,或者通過在表單中設定隱藏欄位的方法。另外的兩種流行方法是使用cookie,或者使用ASP Session變數。在這篇文章裡面,將討論如何使用cookie和session變數來系統管理使用者對網站頁面的存取權限。

使用cookie來跟蹤訪問者
跟蹤訪問者訪問頁面的傳統方法是使用cookies,cookie就是儲存在使用者一端電腦上的一個文字檔,當使用者訪問相應的域時,這些檔案就被送到伺服器上。做為基本應用,cookie被當作使用者再次訪問網站時驗證和區分註冊使用者的手段,而不需要他們再次輸入註冊資訊。同樣,可以使用cookie儲存使用者上一次訪問網站的一些設定。
在ASP中使用cookie非常簡單,可以使用Request對象的Cookies集合取回所有儲存在用戶端的cookie數值,然後使用Response對象的Cookies集合建立或者修改cookie數值,並儲存到用戶端。
  象ASP中許多個物件一樣,一個cookie不僅可以是集合中的一員,還可以自成為集合。建立一個單一cookie非常簡單,代碼如下:
Response.Cookies ("item-name") = "item-value"
建立一個包含多個數值的cookie,代碼是:
Response.Cookies ("item-name")("sub-item-name") = "sub-item-value"
設定cookie的域屬性、路徑屬性以及使用到期時間,相關代碼是:
Response.Cookies ("item-name").domain = "domain-url"
Response.Cookies ("item-name").path = "virtual-path"
Response.Cookies ("item-name").expires = #date#
下面的例子在瀏覽器端建立了cookie選擇,注意:必須在瀏覽器輸出任何資訊前建立cookie,因為它們是HTTP headers的一部分:
〈 %
Response.Cookies("SimpleCookie") = "SimpleExample"
Response.Cookies("CompoundCookie")("Value1") = "Value1" Response.Cookies("CompoundCookie")("Value2") = "Value2"
Response.Cookies("TimedCookie") = "TimedExample"
Response.Cookies("TimedCookie").path = "/" apply to our entire site Response.Cookies("TimedCookie").expires = #10/10/2005#
% 〉
〈 HTML 〉
〈 BODY 〉
...
〈 /BODY 〉
〈 /HTML 〉
讀取cookies
通過使用request對象並遍曆cookie集合,就可以讀取所有cookie的全部內容。如果有些cookie含有多個數值,就通過遍曆那個cookie自身集合來輸出。
〈 HTML 〉
〈 HEAD 〉〈 TITLE 〉Reading the Cookie Collection〈 /TITLE 〉〈 /HEAD 〉
〈 BODY 〉
〈 B 〉The contents of your Cookies are:〈 /B 〉〈 P 〉
〈 TABLE CELLPADDING=0 CELLSPACING=0 〉
〈 %
For Each Item in Request.Cookies
If Request.Cookies(Item).HasKeys Then
use another For...Each to iterate this collection
For Each ItemKey in Request.Cookies(Item)
Response.Write Item & "(" & ItemKey & ") = " _
& Request.Cookies(Item)(ItemKey) & "〈 BR 〉"
Next
Else
print the complete cookie string as normal
Response.Write Item & "=" & Request.Cookies(Item) & "〈 BR 〉"
End If
Next
% 〉〈 /TABLE 〉
〈 /BODY 〉
〈 /HTML 〉
下圖顯示了執行上面代碼的結果。但是,當你現在關閉瀏覽器並重新開啟時,再運行這些代碼,除了TimeCookie以為的所有數值都消失了。這是因為只有TimeCookie設定了“使用到期時間”,其他的當瀏覽器關閉時就自動消失了。

這裡要討論使用cookie儲存登入資訊的問題,並且看看在ASP頁面間如何利用cookie數值。但是請記住:cookie僅僅被送往前次訪問時所在路徑相同的網站,也就是說cookie在初始設定時的環境中才會生效。如果沒有設定cookie的path屬性,它的數值預設就是當初建立時所在的虛擬路徑。
這裡有個例子描述儲存登入資訊到cookie中。由於沒有設定“使用到期時間”,所以目前使用者會話結束後cookie也就不存在了。
...
Response.Cookies("User")("v1") = "〈 % = Request("v1") % 〉" username Response.Cookies("User")("v2") = "〈 % = Request("v2") % 〉" password Response.Cookies("User").path = "/adminstuff" apply to admin pages
...
現在就可以在使用者請求的每一個頁面中尋找這個cookie了,如果沒有找到,就重新導向使用者到登入頁面:
...
If (Request.Cookies("User")("v1") 〈 〉 "alexhomer") _
Or (Request.Cookies("User")("v2") 〈 〉 "secret") Then
Response.Redirect "default.asp?nogood=yes&v1=" & Request.Cookies("User")("v1")
End If
...
使用ASP Session變數跟蹤訪問者
除了使用cookie,我們還可以充分利用ASP中的Session變數。我們可以在使用者Session變數中儲存數值,只要session變數還是啟用的,這些儲存的數值就可以被利用。通常,這些session變數將在使用者最後一次請求頁面後保持20分鐘的時間,除非我們使用Session.Abandon方法明確地釋放這些session變數。同時,可以使用ASP指令碼中的Session.Timeout屬性來設定這個到期時間。
使用session變數跟蹤訪問者要比使用cookie更安全,因為使用者的session變數的內容不會隨著頁面請求而在網路上傳遞。除了初始登入以外,使用者名稱與口令(或者任何數值)一直儲存在伺服器上。我們可以區別和認證訪問者,將他們的登入資訊儲存在他們自己的Session對象中。當需要對訪問者進行驗證時,就從他們自己的Session對象中取會這些資訊。舉個例子,在使用者登入後提交的頁面中,加入如下代碼:
...
Session("UserName") = Request("v1") username from logon dialog form
Session("Password") = Request("v2") password from logon dialog form
...
然後,當需要認證訪問者時,就找到這些cookie並從中取回使用者名稱和口令:
...
If (Session("UserName") 〈 〉 "alexhomer") _
Or (Session("Password") 〈 〉 "secret") Then
Response.Redirect "default.asp?nogood=yes&v1=" & Session("UserName")
End If
...



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。