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

平均分數:0 顆星    投票人數:0
我要評分:
回應
關鍵字
累積 | 今日
loading......
    沒有新回應!
平均分數:0 顆星
投票人數:0
我要評分:
Country
free counters
Google
code