共用方式為


簡單表單驗證

這個範例將說明最簡單的 ASP.NET 表單驗證實作。它可以用來說明如何建立一個使用表單驗證的 ASP.NET 應用程式所需的基本要件。有關利用 XML 檔案儲存使用者名稱和密碼的表單驗證複雜範例,請參閱使用 XML 使用者檔案的表單驗證

在這個案例中,用戶端要求一個受保護的資源 Default.aspx。但是只有一位使用者可以存取受保護的資源:jchen@contoso.com,他必須使用 password 的密碼。使用者名稱和密碼是使用硬式編碼方式寫入 Login.aspx 檔案中。此處包含三個檔案:Web.config、Logon.aspx 和 Default.aspx。這些檔案都位於應用程式根目錄。以下的討論將分析這些檔案內的程式碼。

Web.config

您應該將 Web.config 組態檔案設定為擁有以下的項目,並將它放入應用程式的根目錄 (Default.aspx 所在的目錄)。

<configuration>
    <system.web>

若要設定 Web.config 組態檔案

  1. 將驗證模式設為 Forms。其他的可能值為 Windows、Passport 和 None (空字串)。而在這個範例中,它必須設為 Forms。

            <authentication mode="Forms"> 
    
  2. 設定表單的驗證屬性。

                <forms
    
    1. loginUrl 屬性設為「login.aspx」。Login.aspx 是當 ASP.NET 找不到要求的驗證 Cookie 時,作為重新導向之用的 URL。

                  loginUrl = "logon.aspx"
      
    2. 設定 Cookie 的名稱尾碼。

                  name = ".ASPXFORMSAUTH"/>
      
  3. 拒絕未通過驗證的使用者存取這個目錄。

            </authentication>
            <authorization>
                <deny users="?"/> 
            </authorization>
        </system.web>
    </configuration>
    

Logon.aspx

Login.aspx 是當 ASP.NET 找不到要求的驗證票證時,用以重新導向要求的檔案。這個檔案名稱是在組態檔 Web.config 中指定。顯示一個表單讓用戶端使用者輸入,其中包含兩個文字方塊 (User E-mail NamePassword) 以及一個 Submit 按鈕。使用者必須輸入電子郵件名稱和密碼,再按 Submit 按鈕。然後程式碼會將這個名稱和密碼與 if 陳述式 (Statement) 中的硬式編碼配對作比較。如果比較成功,即將使用者連接至 Default.aspx。如果比較失敗,則顯示錯誤訊息給使用者。

若要實作登入功能

  1. 匯入必要的命名空間。

    <%@ Import Namespace="System.Web.Security" %>
    
  2. 設定指令碼語言。

        <script language="VB" runat=server>
    [C#]
        <script language="C#" runat=server>
    
  3. 建立一個 Login_Click 事件處理常式以處理送出的事件。

            Sub Logon_Click(sender As Object, e As EventArgs)
    [C#]
            void Logon_Click(Object sender, EventArgs e) 
            {
    
  4. 將輸入名稱和密碼與以下使用硬式編碼方式寫入程式碼中的名稱和密碼加以比較,來驗證使用者的身份:jchen@contoso.com 和 password。如果比較成功,即將該要求重新導向至受保護的資源 (Default.aspx)。如果比較失敗,則顯示錯誤訊息。

                If ((UserEmail.Value = "jchen@contoso.com") And _
                        (UserPass.Value = "password")) Then
                    FormsAuthentication.RedirectFromLoginPage _
                        (UserEmail.Value, Persist.Checked)
                Else
                    Msg.Text = "Invalid Credentials: Please try again."
                End If
            End Sub
        </script>
    [C#]
                if ((UserEmail.Value == "jchen@contoso.com") && 
                    (UserPass.Value == "password")) 
                {
                   FormsAuthentication.RedirectFromLoginPage
                       (UserEmail.Value, Persist.Checked);
                }
                else 
                {
                    Msg.Text = "Invalid Credentials: Please try again.";
                }
            }
        </script>
    
  5. 顯示一個表單以收集登入資訊。

    <body>
    <form runat=server>
        <h3><font face="Verdana">Logon Page</font></h3>
        <table>
            <tr>
    
    1. 建立一個 User E-mail Name 文字方塊。加入必要的欄位驗證程式控制項和規則運算式 (Regular Expression) 驗證程式控制項,以檢查有效的電子郵件項目。

              <td>Email:</td>
              <td><input id="UserEmail" type="text" runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserEmail" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
              <td><asp:RegularExpressionValidator id="RegexValidator" 
                       ControlToValidate="UserEmail"
                       ValidationExpression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
                       EnableClientScript="false"
                       Display="Static"
                       ErrorMessage="Invalid format for e-mail address."
                       runat="server"/>
              </td>
          </tr>
          <tr>    
      
    2. 建立一個 Password 文字方塊。

              <td>Password:</td>
              <td><input id="UserPass" type=password runat=server/></td>
              <td><ASP:RequiredFieldValidator 
                       ControlToValidate="UserPass" 
                       Display="Static"
                       ErrorMessage="Cannot be empty."
                       runat=server/>
              </td>
          </tr>
          <tr>
      
    3. 建立一個 Persistent Cookie 核取方塊。若選取 Persistent Cookie 方塊,在整個瀏覽器工作階段內的 Cookie 都將維持有效的狀態。否則,將在關閉瀏覽器後終結 Cookie。

              <td>Persistent Cookie:</td>
              <td><ASP:CheckBox id=Persist runat="server"
                       autopostback="true"/>
              </td>
              <td></td>
          </tr>
      </table>
      
      
    4. 建立 Submit 按鈕,使得回傳時可以引發 Login_Click 事件。

      <input type="submit" OnServerClick="Logon_Click" Value="Logon" 
              runat="server"/>
      <p><asp:Label id="Msg" ForeColor="red" Font-Name="Verdana" 
                  Font-Size="10" runat=server/></p>
      
    </form>
    </body>
    </html>
    

Default.aspx

Default.aspx 檔案是被要求且受保護的資源。它是一個單純的檔案,只顯示 Hello 字串,加上記錄的電子郵件名稱以及一個 Signout 按鈕。

<%@ Page LANGUAGE="VB" %>
<html>
<head>
<title>Forms Authentication</title>

<script runat=server>
    Sub Page_Load(Src As Object, e As EventArgs) 
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name
    End Sub
    Sub Signout_Click(sender As Object, e As EventArgs) 
        FormsAuthentication.SignOut()
        Response.Redirect("logon.aspx")
    End Sub
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                     
           runat="server"/><p>
</form>
</body>
</html>
[C#]
<%@ Page LANGUAGE="C#" %>
<html>
<head>
<title>Forms Authentication</title>
<script runat=server>
    private void Page_Load(Object Src, EventArgs e ) 
    {
        Welcome.InnerHtml = "Hello, " + Context.User.Identity.Name;
    }
    private void Signout_Click(Object sender, EventArgs e) 
    {
        FormsAuthentication.SignOut();
        Response.Redirect("logon.aspx");
    }
</script>

<body>
<h3><font face="Verdana">Using Forms Authentication</font></h3>
<span id="Welcome" runat=server/>
<form runat=server>
    <input type="submit" OnServerClick="Signout_Click" Value="Signout"                                                    
           runat="server"/><p>
</form>
</body>
</html>

請參閱

ASP.NET Web 應用程式安全性 | 設計安全的 ASP.NET 應用程式 | 使用 XML 使用者檔案的表單驗證