570 likes | 676 Views
ASP.NET 網頁製作教本 – 從基本語法學起. 第 15 章 會員管理、計費網頁. 15-1 會員管理. 驗證登入者的幾種方案. ASP.NET 提供三種驗證登入者身份的方法: Windows-based 驗證 。 Form-based 驗證 。 Passport-based 驗證 。. Form-based 驗證之準備工作. 想要以 Form-based 方式驗證登入者,必須先做好以下準備: 將網頁的所在目錄設定成 IIS 的應用程式。 設定好 web.config 檔案。 提供一個讓上網者輸入帳號及密碼的輸入表單 。.
E N D
ASP.NET 網頁製作教本 – 從基本語法學起 第 15 章 會員管理、計費網頁
驗證登入者的幾種方案 ASP.NET 提供三種驗證登入者身份的方法: • Windows-based 驗證 。 • Form-based 驗證 。 • Passport-based 驗證 。
Form-based 驗證之準備工作 • 想要以 Form-based 方式驗證登入者,必須先做好以下準備: • 將網頁的所在目錄設定成 IIS 的應用程式。 • 設定好 web.config 檔案。 • 提供一個讓上網者輸入帳號及密碼的輸入表單。
將網頁的所在目錄設定成IIS 的應用程式 Step 1-1 • 以 /kjaspx/ch15 為例,來說明如何將 ch15 目錄設定成 IIS 的應用程式: 1.開啟 Internet Information Services:過程是開啟「控制台 -> 系統管理工具 -> Internet Information Services」。
將網頁的所在目錄設定成IIS 的應用程式 Step 2 2.在 Internet Information Services 視窗中,依序展開「本機電腦->網站->預設的網站->kjaspx」,然後在 ch15 目錄上面按下滑鼠右鈕,待出現快顯功能表時,選取「內容」。 • Internet Information Services 程式在Windows 2000 裡面稱為「Internet 服務管理員」,其開啟的過程是:控制台 -> 系統管理工具 -> Internet 服務管理員。
將網頁的所在目錄設定成IIS 的應用程式 Step 3 3. 接著會出現「ch15內容」視窗。
將網頁的所在目錄設定成IIS 的應用程式 Step 4 4.檢視 IIS 應用程式與目錄的差異:比較ch14目錄及ch15目錄在圖示上的差異。
設定好 web.config 檔案 • web.config 檔案的內容: <configuration> <system.web> <authentication mode="Forms"> <forms name="kjaspx_ch15" loginUrl="Login.aspx" /> </authentication> <authorization> <deny users="?" /> </authorization> </system.web> </configuration
提供一個讓上網者輸入帳號及密碼的輸入表單: Login.aspx • 檢驗帳號及密碼是否正確的依據是Users.mdb 資料庫的 Users 資料表
Form-based 驗證之初體驗 Step 1 • 開啟瀏覽器,然後在網址欄輸入: • 結果並不會直接進入 Hello.aspx 網頁,而是先出現「請先登入您的帳號及密碼」的 Login.aspx 網頁。 http://localhost/kjaspx/ch15/Hello.aspx
Form-based 驗證之初體驗 Step 2-1 • 在 Login.aspx 網頁中,「帳號」欄位請輸入 kjwang、「密碼」欄位請輸入kj6688,然後按下「登入」鈕,接著就會進入 Hello.aspx 網頁。
Form-based 驗證之初體驗 Step 3-1 • 在瀏覽器的網址欄輸入「http://localhost/kjaspx/ch15/Hello2.aspx」瀏覽ch15目錄的另一個網頁 Hello2.aspx,瀏覽之前,請先猜看看是否會先進入 Login.aspx 網頁?
Form-based 驗證之初體驗 Step 3-2 • 答案是直接進入Hello2.aspx網頁,並不會先進入Login.aspx。 • 說明:為了避免上網者每瀏覽一個網頁就必須輸入一次帳號及密碼,ASP.NET 會把登入成功的帳號記錄下來,所以不會重複要求輸入帳號及密碼。
Form-based 驗證之初體驗 Step 4-1 • 延續步驟3,現在您位於 Hello2.aspx 網頁,請按下其中的「登出」鈕,接著網頁會恢復成 Login.aspx 網頁,如下圖:(註: Hello.aspx 網頁也有提供「登出」鈕,其功用與 Hello2.aspx 網頁的「登出」鈕相同)
Form-based 驗證之初體驗 Step 4-3 • 說明:一旦登出之後,ASP.NET 就不記錄剛才登入成功的帳號,接下來如果要瀏覽 Hello.aspx 網頁或是 Hello2.aspx 網頁,都必須要重新登入才行。
Form-based 驗證之初體驗 Step 5 • 在 Login.aspx 網頁中,請重新輸入「帳號」及「密碼」,然後核取「記得我」欄位,再按下「登入」鈕,此時會再度進入 Hello2.aspx 網頁,但接下來不要按「登出」鈕,請直接關閉瀏覽器,我們要做個有趣的實驗。
Form-based 驗證之初體驗 Step 6-1 • 再度開啟瀏覽器,輸入以下網址來瀏覽Hello.aspx: • 而在瀏覽 Hello.aspx 之前,請先猜看看是否會先進入Login.aspx? http://localhost/kjaspx/ch15/Hello.aspx
Form-based 驗證之初體驗 Step 6-2 • 結果並不會先進入Login.aspx,而是直接進入Hello.aspx網頁。 • 說明:「記得我」的功用是把帳號記錄在Cookie檔案中,所以除非有按「登出」鈕,否則就算瀏覽器被關閉了,下次重新啟動時依然有效。
Form-based 驗證之初體驗 Note • 最後請按下 Hello.aspx 網頁的「登出」鈕。由於剛才的步驟 5 我們核取了「記得我」欄位,所以如果您沒有登出,帳號會一直記錄在檔案中,而使得您下次(也許隔了幾週)測試 ch15 的網頁時,都不會出現 Login.aspx 網頁,到時候您可能會覺得網頁出了問題,而其實這都是正常的現象。
瞭解 Login.aspx 的工作原理(1)Login.aspx Part I <%@ Import Namespace="System.Web.Security " %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <Html> <Body> <Form runat="server"> <H3>請先登入您的帳號及密碼:<HR></H3> <Blockquote>
瞭解 Login.aspx 的工作原理(2)Login.aspx Part II 帳號:<asp:TextBox runat="server" id="Account" /><p> 密碼:<asp:TextBox runat="server" id="Password" TextMode="Password" /><p> 記得我:<asp:CheckBox runat="server" id="RememberMe" /><p> <asp:Button runat="server" text="登入" OnClick="Login_Click" /><p> <asp:Label runat="server" id="Msg" ForeColor="Red" /> </Blockquote><HR> <Font Size=-1 Color=Blue>登入網頁前, 請確定瀏覽器的Cookie 是開啟的.</Font></Form> </Body> </Html>
瞭解 Login.aspx 的工作原理 (3)Login.aspx Part III <script language="VB" runat="server"> Sub Login_Click( sender As Object, e As EventArgs ) If Verify( Account.Text, Password.Text ) Then FormsAuthentication.RedirectFromLoginPage(Account.Text, RememberMe.Checked) Else Msg.Text = "帳號或密碼錯誤, 請重新輸入!" End If End Sub
瞭解 Login.aspx 的工作原理 (4)Login.aspx Part VI Function Verify( 帳號 As String, 密碼 As String) As Boolean Dim Conn As OleDbConnection, Cmd As OleDbCommand Dim Rd As OleDbDataReader, SQL As String Dim Provider = "Provider=Microsoft.Jet.OLEDB.4.0" Dim Database = "Data Source=" & Server.MapPath( "Users.mdb" ) Conn = New OleDbConnection( Provider & ";" & DataBase ) Conn.Open()
瞭解 Login.aspx 的工作原理 (5)Login.aspx Part V SQL = "Select * From Users Where " & _ "UserID='" & 帳號 & "'" & _ " And Password='" & 密碼 & "'" Cmd = New OleDbCommand( SQL, Conn ) Rd = Cmd.ExecuteReader() If Rd.Read() Then ' 表示有找到UserID 及Password, 通過驗證 Conn.Close() Return True Else Conn.Close() Msg.Text = "帳號或密碼錯誤, 請重新輸入!" Return False End If End Function </script>
瞭解 Login.aspx 的工作原理(6)表單的佈置 要完成 Login.aspx 網頁,首先要提供一個輸入表單,本書所提供的輸入表單含有三個輸入欄位 -- 帳號、密碼、記得我,而它們分別命名為 Account、Password、RememberMe。
瞭解 Login.aspx 的工作原理(7)Login_Click 事件程序:Part I • 「登入」鈕所對應的事件程序 Login_Click If Verify( Account.Text, Password.Text ) Then FormsAuthentication.RedirectFromLoginPage(Account.Text, RememberMe.Checked) Else Msg.Text = "帳號或密碼錯誤, 請重新輸入!" End If
瞭解 Login.aspx 的工作原理(8)Login_Click 事件程序:Part II • 如果已經通過檢驗,則接著呼叫 FormsAuthentication.RedirectFromLoginPage 方法,如下: FormsAuthentication.RedirectFromLoginPage(Account.Text, RememberMe.Checked)
瞭解 Login.aspx 的工作原理(9)Verify 函數 • 為了檢驗帳號及密碼是否通過驗證,Verify函數會開啟Users.mdb資料庫,然後利用以下SQL指令選取資料: Select * From Users Where UserID='帳號' And Password='密碼'
瞭解 Login.aspx 的工作原理(10)Hello.aspx Part I <%@ Import Namespace="System.Web.Security " %> <Html> <Body> <H3><%=User.Identity.Name%>, 歡迎使用本網頁!<HR></h3> <UL> <LI>當您進入本網頁時,您已經通過 Login.aspx 網頁的驗證。 <LI>ASP.NET 會利用 Cookie 記錄著您已經通過驗證,在沒有關 閉瀏覽器的情況下,您可以瀏覽 ch15 目錄的網頁而不需要重新 輸入帳號及密碼。 <LI>當您不再使用本網頁時,建議您按下「登出」鈕,這樣子可 以保證別人無法在您離開座位時,使用您的帳號瀏覽 ch15 的網 頁。 </UL> <HR>
瞭解 Login.aspx 的工作原理(10)Hello.aspx Part II <Form runat=server> <asp:Button runat="server" text="登出" OnClick="Logout_Click" /> </Form> </Body> </Html> <script language="VB" runat=server> Sub Logout_Click(sender As Object, e As EventArgs) FormsAuthentication.SignOut() Response.Redirect("Hello.aspx") End Sub </script>
瞭解 Login.aspx 的工作原理(11)mdb 資料庫的保全 • 為 mdb 資料庫進行「加密」工作,而其中建立 Connection 物件的程式應改成: Dim Provider = "Provider=Microsoft.Jet.OLEDB.4.0"Dim Database = "Data Source=" & Server.MapPath( "UsersPwd.mdb" )Dim DbPass = "Jet OLEDB:Database Password=kj6688"Conn = New OleDbConnection( Provider & ";" & DataBase & ";" & DbPass )Conn.Open()
即時加入會員(1) • 範例網頁的組成 :
即時加入會員 (2) • 操作說明(1): http://localhost/kjaspx/ch15Member/Member.aspx
即時加入會員 (3) • 操作說明(2): 如果是舊會員但忘了自己的資料,則可以按下「舊會員,但是忘了密碼」進入Forget.aspx 網頁:
即時加入會員 (4) • Forget.aspx #52~63 #52 mail.Subject = "您的會員資料" #53 mail.To = Rd.Item("Email") #54 mail.From = "service@xxx.com.tw" ' 改成系統維護者的 e-mail #55 mail.BodyFormat = MailFormat.Text #56 Body = "使用者名稱:" & Rd.Item("UserID") & vbCrLf #57 Body = Body & " 密碼:" & Rd.Item("Password") & vbCrLf #58 Body = Body & " 姓名:" & Rd.Item("Name") & vbCrLf & vbCrLf #59 Body = Body & "ASP.NET 網頁製作教本 敬上" #60 mail.Body = Body #61 #62 On Error Resume Next #63 SmtpMail.SmtpServer = "msa.hinet.net" #64 SmtpMail.Send(mail)
fee00.aspx 網頁之架構 Part I <%@ Import Namespace="System.Web.Security " %> <script language="VB" runat=server> Sub Page_Load(sender As Object, e As EventArgs) Dim Page As String = Request.ServerVariables("PATH_INFO") Dim UserID As String = User.Identity.Name Msg.Text = "帳號: " & UserID & "<br>" Msg.Text &= "網頁: " & Page ' 接著根據 Page 之計費點數,扣除 UserID 帳號的點數 End Sub </script>
fee00.aspx 網頁之架構 Part II <Html> <Body> <H2>這是個計費網頁...<HR></H2> <asp:Label runat="server" id="Msg" ForeColor=Red/> <p> ...接著根據此一「網頁」之計費點數,扣除此一「帳號」的點數<p> <HR> </Body> </Html>
.htm 網頁的計費(1) • 範例網頁的組成
.htm 網頁的計費(2) • 操作說明(1):瀏覽 Values.aspx 網頁
.htm 網頁的計費 (3) • 操作說明(2):按下 Tips01.htm 連結
.htm 網頁的計費 (4) • 操作說明(3):回到 Values.aspx 網頁,然後依序按下 Tips02.aspx、Tips04.aspx、Tips08.aspx 連結,接著再按下 「計費統計」鈕進入 ValList.aspx 網頁。
.htm 網頁的計費(5) • Pages 資料表的結構:
.htm 網頁的計費 (6) • Pages 資料表其內容如下:
.htm 網頁的計費(7) • Charges 資料表的結構: