另外就是自行設計驗證網頁,於form中放置填入帳號及密碼的輸入方塊,submit後寫一段驗證程式來驗證帳號密碼是否正確,然後利用FormsAuthentication類別執行登入及登出,並利用this.Context.User.Identity.Name屬性取得登入使用者的名稱
詳細步驟:
- 於web.config中<
system.web>區塊加入下面設定以宣告網站驗證方式為表單驗證且不允許匿名存取(除了登入頁)
<authentication mode="Forms" >
<forms name=".ASPXFORMSAUTH" loginUrl="login.aspx" />
</authentication>
<authorization>
<deny users="?"/>
</authorization> - 於login.aspx放置輸入帳號及密碼的方塊及送出按鈕
- 於login.aspx.cs的Page_Load()進行驗證,若驗證成功則呼叫FormsAuthentication.SetAuthCookie()將使用者名稱紀錄於cookie
- 判斷Request["ReturnUrl"]是否為null,若是null則導向到登入成功後的預設網頁,否則呼叫FormsAuthentication.RedirectFromLoginPage()導向回原本的網頁(通常為timeout造成cookie消失)
- 登出作法為呼叫FormsAuthentication.SignOut()
- 若使用SqlDataSource且需要於查詢語法取得登入使用者名稱作為where條件的值,則可於Selecting事件中撰寫下列程式
e.Command.Parameters["@AssistantID"].Value = this.Context.User.Identity.Name;
註:若login.aspx內含圖片則會因為<deny users="?"/>的設定而無法顯示,或是有某些特定網頁或路徑需要另外設定允許匿名存取,則需在web.config放入一段如下的設定
<location path="GetNewPassword.aspx">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
沒有留言:
張貼留言