ASP.NET專題研究——登入許可權

來源:互聯網
上載者:User

(一)關於“許可權驗證”的基礎知識: 

通常我們注意到有這樣一個現象:在某些論壇中我們可以查看別人的文章,但是如果你點擊了回複,不是跳轉到Reply類似的回複頁面而是跳轉到了Login.aspx頁面。如果您不知道ASP.NET中還存在著這麼一個可以方便檢測是否是匿名使用者登入的功能,通常你會選擇Session去記錄,簡略的代碼往往是這樣:

  • 先寫一個類,直接繼承於System.Web.UI.Page,然後這樣Coding:

Public  partial class RegisterRequired : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

            if (Session[“username”]==null)

            {

                        Response.Redirect(“Login.aspx?FromUrl=” + Request.Url.AbsoluteUri

”);

            }

    }

}

  • 你可以在需要驗證的頁面讓它直接繼承RegisterRequired,在Login頁面自己寫一些方法去驗證,然後直接:Response.Redirect(Request[“FromUrl”])即可。

這樣做當然是毫無問題,但是需要反覆指定重新導向之類的功能,比較囉嗦。相對而言,微軟已經抽象出了一個類,叫做FormsAuthentication,專門用於發布憑據(驗證當前客戶是否是匿名還是已經登入的)。該類使用Cookie進行驗證。

1)首先需要在Web.config中的<system.web>節點進行配置:

<authentication Mode=”Forms”>

            <forms Name=”Cookie的Name” Timeout=”60” Cookieless=”AutoDetect” slidingExpiration=”true” loginUrl=”Login.aspx” />

<authentication>

我們通常只要這樣設定就可以了,現在來逐一解釋以下各個主要參數的妙用:

  • Name:Cookie的名字,您可以自訂。
  • Timeout:指定Cookie到期的時間,超過了這段時間Cookie作廢(意味著你如果點擊了某個頁面之後間隔Timeout的時間段,再次重新導向到某個不允許匿名使用者的頁面,會重新回到loginUrl指定的頁面要求重新登入,單位:秒)。
  • Cookieless:Cookie的模式(建議使用自動檢測,防止某些使用者禁用了Cookie;此時,Cookie將作為字串嵌入到當前的地址欄中去)。
  • slidingExpiration:設定Cookie到期的模式:

如果是true,意味著只要使用者瀏覽頁面,Cookie的時間將自動在上一次的時間基礎上再度重新開始計時(比如你定義30,那麼當第29秒的時候你在登入的情況下重新導向到某個頁面了,此時Cookie又從0秒開始計時,到下一個30秒一次也不操作才算作廢)。

如果是false,則只能在規定的秒內瀏覽,超過自動重新導向(建議true)。

  • loginUrl:如果沒有Cookie(匿名使用者)訪問不允許匿名使用者存取的頁面時候,自動重新導向到登入頁面,強制使用者登入擷取Cookie。

2)在完成這些操作以後,在<system.web>節點中您還要指定哪些頁面(不)允許匿名訪問:

<authorization>

<allow users=”*”/>

<deny users=”?”/>

</authorization>

這種定義表示:web.config定義的同級目錄下的所有頁面都必須在擷取憑據(Cookie)之後才允許您訪問(“*”表示任何使用者,表示匿名使用者),不然直接重新導向到登入頁面。

通常情況下,一般Default.aspx頁面是允許別人進行訪問的(放置於web程式的根目錄下,其餘的根據需求放在不同的檔案夾裡)。如果要設定“匿名使用者除了可以直接存取Default.aspx,其餘什麼都不可以”的情況下,這樣做比較符合:

  • 和Default.aspx同目錄下的那個web.config中不要寫(<authorization>。
  • 在需要驗證的檔案夾中建立一個web.config,然後寫上ii)的“<authorization>

”部分即可。

如果你喜歡將不同檔案夾的不同頁面配置全部寫在根目錄的那個web.config中,您可以這樣做:

<location path=”頁面或者是檔案夾”>

            <system.web>

                        <authorization>

<allow users=”*”/>

<deny users=”?”/>

</authorization>

            </system.web>

</location>

3)完成了以上的步驟之後,您只要在某個頁面(比如登入頁面,發放Cookie憑據給目前使用者就可以了):

            if (判斷登入條件)

            ……

            FormsAuthentication.SetAuthCookie (憑據名稱, 是否跨瀏覽器支援)

            if (string.IsNullOrEmpty(Request[“ReturnUrl”]))

            {

                        Response.Redirect (“預設頁面”);

            }

Response.Redirect (Request[“ReturnUrl”]);

這裡解釋一下:

  • “憑據名稱”:應該是唯一的使用者非匿名的憑據名(最好是Id或者是之後所講的MemberShip中的UserName,這樣你可以直接從User.Identity.Name擷取這個Id,以便後續的操作)
  • “是否跨瀏覽器支援”:用於指定是否對於不同瀏覽器進程之間享用同一個Cookie。
  • ReturnUrl:是某個不允許匿名使用者存取的頁面路徑,當使用FormsAuthentication.SetAuthCookie給目前使用者分發憑據的完畢之後,判斷ReturnUrl是否為空白(不為空白直接跳轉到那個頁面,否則人為指定一個頁面)。

  當然,如果ReturnUrl肯定不為空白,您直接可以這樣做:

FormsAuthentication.RedirectFromLoginPage(憑據名稱, 是否跨瀏覽器支援) 。

  除了登入之外,“登出”(SignOut也是一個非常實用的功能),實際上你可以自己在頁面中這樣做:FormsAuthentication.SignOut();

 

(二)ASP.NET中的Login控制項:

            ASP.NET中實際上已經為你現成提供了一個成為Login的控制項,這樣你就不必總是去自訂登入控制項了。您可以在Login_Authenticate中寫驗證代碼:

            protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)

{

          //判斷條件

        e.Authentication = true;           //必須加入,相當於是SetAuthCookie的功能,可以直接在User.Identity.Name擷取UserTextBox中的Name。

        Response.Redirect(…..);

}

或者你直接指定Login1的DestinationPageUrl屬性,這樣一旦成功登入後就自動跳轉到該屬性指定的頁面了。

 

 (三)ASP.NET中登出控制項:

  我們通常看到的登入頁面往往是:如果匿名使用者存取登入頁面,應該出現登入的提示框(輸入使用者名稱、口令等資訊),當成功登入之後該提示框出現“歡迎XXX登入”的字樣,然後底下有一個按鈕,允許你登出。這個我們完全可以不寫任何代碼,直接通過拖拽控制項實現:

  除了剛才講的登入控制項之外,我們還需要三個控制項:LoginView、LoginStatus和LoginName。

  LoginView不直接使用,它包含兩個模板:AnoymousTemplate和LoggedTemplate(RoleGroupTemplate稍後在角色部分講到)。我們通常把Login控制項放在AnoymousTemplate中,在LoggedTemplate中放上一個LoginName(自動顯示登入以後的名字),同時放上一個LoginStatus控制項(預設LogOut狀態),當使用者點擊之後再次成為匿名使用者。

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.