- 沒有新回應!
2009-06-19 10:33 ASP.NET 限定某資料夾下必須通過認證才能存取
通常在一個網站裡,我們會提供一些資訊是不需認證就能存取瀏覽,但也會設定某一些頁面必須在使用者通過認證後,才能允許執行。這時之前的方式必須在通過驗證時將使用者通過驗證的資訊寫在 session、Application、Viewstate 或 cookie 中,然後在每一個ASP程式開頭去檢查是否已經通過驗證,有驗證過才能繼續讓使用者執行。這樣實在很麻煩......。今天要講的機制是,你可以藉由 web.config 的設定,把需要驗證的程式放在某資料夾下,當未通過之前,只要存取這資料夾下的程式,都會被系統自動導到登入畫面,而且也不需要在每個程式都放一段檢查驗證的片段,很方便滴,來看看吧!
情境:
專案名稱目錄:test
在新增網頁專案後,系統會自動產生 App_Data 目錄及 default.aspx,我們預設將不需認證的頁面放於網站根目錄下,需要認證的程式碼放於 manage 目錄(當然這個目錄是原本沒有的,你必須新增資料夾)。
在 manage 目錄下再新增 login.aspx(用來做登入畫面) 與 show.aspx(用來表示通過驗證後,可以顯示的畫面)
步驟一:設定 web.config,新增下列內容
<location path="manage">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<system.web> <-- 可以新增在這一行之上
↓ 然後<authentication mode="Forms"/> 把這一行換成
<authentication mode="Forms">
<forms name=".member" loginUrl="manage/login.aspx" path="/" timeout="30" protection="All"/>
</authentication>
註:
- .member: 寫入 session 的名稱
- loginUrl:當未通過認證,所導向的頁面
- defaultUrl:當通過認證時所導向的網頁
- timeout:session 的 timeout 時間
步驟二:設定 login 登入畫面
ASP.NET 有提供 Login 登入驗證機制,如下圖左邊的 Login ,選用這個物件後,就會出現下方右邊的登入畫面

因為這樣的登入認證必須透過將使用者設定在 web.config 或是用 ASP.NET 幫你自動建立的DB不是很好用,又因為我們只是要測試資料夾驗證功能,所以我們可以在程式碼裡加入,讓你不管輸入什麼,都會通過認證。
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
e.Authenticated = True
End Sub
步驟三:設定 Logout 程式片段
Response.Buffer = True
Response.ExpiresAbsolute = Now().Subtract(New TimeSpan(1, 0, 0, 0))
Response.Expires = 0
Response.CacheControl = "no-cache"
FormsAuthentication.SignOut()
Response.Clear()
Response.Redirect("manage/login.aspx")
最後:測試方式,你可以將此網站的首頁設為show.aspx,如此便可以測試,系統會不會幫你自動轉到 login.aspx 畫面去了

~ End
20100527 reference
http://msdn.microsoft.com/zh-tw/library/system.web.security.formsauthentication.signout%28VS.80%29.aspx
http://www.xoc.net/works/tips/forms-authentication.asp
Login 元件使用「樣本」-20100916
我要評分:

