57
ASP.NET ASP.NET 網網網網網網 網網網網網網 網網網網網網網 網網網網網網網 15 15 會會會會 會會會會 會會會會 會會會會

ASP.NET 網頁製作教本 – 從基本語法學起

Embed Size (px)

DESCRIPTION

ASP.NET 網頁製作教本 – 從基本語法學起. 第 15 章 會員管理、計費網頁. 15-1 會員管理. 驗證登入者的幾種方案. ASP.NET 提供三種驗證登入者身份的方法: Windows-based 驗證 。 Form-based 驗證 。 Passport-based 驗證 。. Form-based 驗證之準備工作. 想要以 Form-based 方式驗證登入者,必須先做好以下準備: 將網頁的所在目錄設定成 IIS 的應用程式。 設定好 web.config 檔案。 提供一個讓上網者輸入帳號及密碼的輸入表單 。. - PowerPoint PPT Presentation

Citation preview

Page 1: ASP.NET  網頁製作教本  –  從基本語法學起

ASP.NET ASP.NET 網頁製作教本網頁製作教本 – – 從基本語法學起從基本語法學起

第 第 15 15 章 章 會員管理、計費網頁 會員管理、計費網頁

Page 2: ASP.NET  網頁製作教本  –  從基本語法學起

15-1 15-1 會員管理會員管理

Page 3: ASP.NET  網頁製作教本  –  從基本語法學起

驗證登入者的幾種方案驗證登入者的幾種方案

ASP.NET ASP.NET 提供三種驗證登入者身份的方法:提供三種驗證登入者身份的方法:

1.1. Windows-based Windows-based 驗證驗證 。 。2.2. Form-based Form-based 驗證驗證 。 。3.3. Passport-based Passport-based 驗證驗證 。 。

Page 4: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之準備工作驗證之準備工作 想要以 想要以 Form-based Form-based 方式驗證登入者,方式驗證登入者,

必須先做好以下準備:必須先做好以下準備: 1.1. 將網頁的所在目錄設定成 將網頁的所在目錄設定成 IIS IIS 的應用的應用

程式。程式。 2.2. 設定好 設定好 web.config web.config 檔案。檔案。 3.3. 提供一個讓上網者輸入帳號及密碼的輸提供一個讓上網者輸入帳號及密碼的輸

入表單入表單 。。

Page 5: ASP.NET  網頁製作教本  –  從基本語法學起

將網頁的所在目錄設定成將網頁的所在目錄設定成 IIS IIS 的應用程式 的應用程式 Step 1-1Step 1-1

以以 //kjaspx/ch15 kjaspx/ch15 為例,來說明如何將 為例,來說明如何將 ch15 ch15 目錄設定成 目錄設定成 IIS IIS 的應用程式:的應用程式:

11.. 開啟 開啟 Internet Information ServicesInternet Information Services ::過過程是開啟「控制台程是開啟「控制台 -> -> 系統管理工具系統管理工具 -> -> Internet Information ServicesInternet Information Services 」。」。

Page 6: ASP.NET  網頁製作教本  –  從基本語法學起

將網頁的所在目錄設定成將網頁的所在目錄設定成 IIS IIS 的應用程式 的應用程式 Step 1-2Step 1-2

1.展開至kjaspx目錄

2.按下滑鼠右鈕

3.選取

Page 7: ASP.NET  網頁製作教本  –  從基本語法學起

將網頁的所在目錄設定成將網頁的所在目錄設定成 IIS IIS 的應用程式 的應用程式 Step 2Step 2

2.2. 在 在 Internet Information Services Internet Information Services 視窗中,視窗中,依序展開「本機電腦依序展開「本機電腦 ->-> 網站網站 ->-> 預設的預設的網站網站 ->->kjaspxkjaspx 」,」,然後在 然後在 ch15 ch15 目錄上目錄上面按下滑鼠右鈕,待出現快顯功能表時,面按下滑鼠右鈕,待出現快顯功能表時,選取「內容」。選取「內容」。

Internet Information Services Internet Information Services 程式在程式在Windows 2000 Windows 2000 裡面稱為「裡面稱為「 Internet Internet 服服務管理員」,其開啟的過程是:控制台務管理員」,其開啟的過程是:控制台 -> -> 系統管理工具系統管理工具 -> -> Internet Internet 服務管理服務管理員。員。

Page 8: ASP.NET  網頁製作教本  –  從基本語法學起

將網頁的所在目錄設定成將網頁的所在目錄設定成 IIS IIS 的應用程式 的應用程式 Step 3Step 3

3.3.接著會出現「接著會出現「 ch15ch15 內容」視窗內容」視窗。。

1.按下

2.按下

Page 9: ASP.NET  網頁製作教本  –  從基本語法學起

將網頁的所在目錄設定成將網頁的所在目錄設定成 IIS IIS 的應用程式 的應用程式 Step 4Step 4

4.4. 檢視 檢視 IIS IIS 應用程式與目錄的差異:比較應用程式與目錄的差異:比較ch14ch14 目錄及目錄及 ch15ch15 目錄在圖示上的差異目錄在圖示上的差異。。

表示這是一般目錄

表示這是 IIS 的應用程式

Page 10: ASP.NET  網頁製作教本  –  從基本語法學起

設定好 設定好 web.config web.config 檔案檔案 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

Page 11: ASP.NET  網頁製作教本  –  從基本語法學起

提供一個讓上網者輸入帳號及提供一個讓上網者輸入帳號及密碼的輸入表單密碼的輸入表單 : : Login.aspxLogin.aspx 檢驗帳號及密碼是否正確的依據是檢驗帳號及密碼是否正確的依據是

Users.mdb Users.mdb 資料庫的 資料庫的 Users Users 資料表資料表 UserID Password Name Email 點數ada ad6633 方雅達 [email protected] 30

david da6666 吳大衛 [email protected] 30

Jackie Ja2255 陳龍 [email protected] 30

James Ja111010 詹明文 [email protected] 30

jason ja7700 謝捷森 [email protected] 30

jimmy ji1188 楊吉米 [email protected] 30

kjwang kj6688 王國榮 [email protected] 30

sam sa2266 馬山姆 [email protected] 30

sue su1155 將淑華 [email protected] 30

toto to6666 江咚咚 [email protected] 30

walter wa6677 李水特 [email protected] 30

Page 12: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 1Step 1

開啟瀏覽器,然後在網址欄輸入:開啟瀏覽器,然後在網址欄輸入:

結果並不會直接進入 結果並不會直接進入 Hello.aspx Hello.aspx 網網頁,而是先出現「請先登入您的帳號及頁,而是先出現「請先登入您的帳號及密碼」的 密碼」的 Login.aspx Login.aspx 網頁。 網頁。

http://localhost/kjaspx/ch15/Hello.aspx

Page 13: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 2-Step 2-11

1.輸入 kjwang

2.輸入 kj6688

3.按下

在 在 Login.aspx Login.aspx 網頁中,「帳號」欄位請網頁中,「帳號」欄位請輸入 輸入 kjwangkjwang、「、「密碼」欄位請輸入密碼」欄位請輸入kj6688kj6688 ,,然後按下「登入」鈕,接著就然後按下「登入」鈕,接著就會進入 會進入 Hello.aspx Hello.aspx 網頁。網頁。

Page 14: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 2-2Step 2-2

Page 15: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之流程圖驗證之流程圖

其他 .aspx網頁

通過驗證

瀏覽其他 .aspx 網頁

True

Login.aspxFalse

Hello.aspx

通過驗證

瀏覽 Hello.aspx

True

Login.aspxFalse

Page 16: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 3-1Step 3-1

在瀏覽器的網址欄輸入「在瀏覽器的網址欄輸入「 http://http://localhost/kjaspx/ch15/Hello2.aspxlocalhost/kjaspx/ch15/Hello2.aspx 」」瀏覽瀏覽ch15ch15 目錄的另一個網頁 目錄的另一個網頁 Hello2.aspxHello2.aspx ,,瀏瀏覽之前,請先猜看看是否會先進入 覽之前,請先猜看看是否會先進入 Login.aspx Login.aspx 網頁?網頁?

Page 17: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 3-2Step 3-2

答案是直接進入答案是直接進入 Hello2.aspxHello2.aspx 網頁,並不網頁,並不會先進入會先進入 Login.aspxLogin.aspx。。

說明說明 :為了避免上網者每瀏覽一個網頁:為了避免上網者每瀏覽一個網頁就必須輸入一次帳號及密碼,就必須輸入一次帳號及密碼, ASP.NET ASP.NET 會把登入成功的帳號記錄下來,所以不會把登入成功的帳號記錄下來,所以不會重複要求輸入帳號及密碼。會重複要求輸入帳號及密碼。

Page 18: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 4-Step 4-11

延續步驟延續步驟 33 ,現在您位於 ,現在您位於 Hello2.aspx Hello2.aspx 網網頁,請按下其中的「登出」鈕,接著網頁,請按下其中的「登出」鈕,接著網頁會恢復成 頁會恢復成 Login.aspx Login.aspx 網頁,如下圖:網頁,如下圖:(( 註: 註: Hello.aspx Hello.aspx 網頁也有提供「登網頁也有提供「登出」鈕,其功用與 出」鈕,其功用與 Hello2.aspx Hello2.aspx 網頁的網頁的「登出」鈕相同「登出」鈕相同 ))

Page 19: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 4-Step 4-22

Login.aspx

Hello2.aspx

按下

Page 20: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 4-3Step 4-3

說明說明:一旦登出之後,:一旦登出之後, ASP.NET ASP.NET 就不記就不記錄剛才登入成功的帳號,接下來如果要錄剛才登入成功的帳號,接下來如果要瀏 覽 瀏 覽 Hello.aspx Hello.aspx 網 頁 或 是 網 頁 或 是 Hello2.aspx Hello2.aspx 網頁,都必須要重新登入才行。網頁,都必須要重新登入才行。

Page 21: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 5Step 5

在 在 Login.aspx Login.aspx 網頁中,請重新輸入「帳網頁中,請重新輸入「帳號」及「密碼」,然後號」及「密碼」,然後核取「記得我」核取「記得我」欄位欄位,再按下「登入」鈕,此時會再度,再按下「登入」鈕,此時會再度進入 進入 Hello2.aspx Hello2.aspx 網頁,但接下來網頁,但接下來不要不要按「登出」鈕按「登出」鈕,請直接,請直接關閉瀏覽器關閉瀏覽器,我,我們要做個有趣的實驗。們要做個有趣的實驗。

Page 22: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 6-Step 6-11

再度開啟瀏覽器,輸入以下網址來瀏覽再度開啟瀏覽器,輸入以下網址來瀏覽Hello.aspxHello.aspx::

而在瀏覽 而在瀏覽 Hello.aspx Hello.aspx 之前,請先猜看看之前,請先猜看看是否會先進入是否會先進入 Login.aspxLogin.aspx??

http://localhost/kjaspx/ch15/Hello.aspx

Page 23: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 Step 6-2Step 6-2

結果並不會先進入結果並不會先進入 Login.aspxLogin.aspx ,, 而是直而是直接進入接進入 Hello.aspxHello.aspx 網頁。網頁。

說明說明 :「記得我」的功用是把帳號記錄:「記得我」的功用是把帳號記錄在在 CookieCookie 檔案中,所以除非有按「登檔案中,所以除非有按「登出」鈕,否則就算瀏覽器被關閉了,下出」鈕,否則就算瀏覽器被關閉了,下次重新啟動時依然有效。次重新啟動時依然有效。

Page 24: ASP.NET  網頁製作教本  –  從基本語法學起

Form-based Form-based 驗證之初體驗 驗證之初體驗 NoteNote

最後請按下 最後請按下 Hello.aspx Hello.aspx 網頁的「登網頁的「登出」鈕出」鈕。由於剛才的步驟 。由於剛才的步驟 5 5 我們核取了我們核取了「記得我」欄位,所以如果您沒有登出,「記得我」欄位,所以如果您沒有登出,帳號會一直記錄在檔案中,而使得您下帳號會一直記錄在檔案中,而使得您下次次 (( 也許隔了幾週也許隔了幾週 )) 測試 測試 ch15 ch15 的網頁時,的網頁時,都不會出現 都不會出現 Login.aspx Login.aspx 網頁,到時候您網頁,到時候您可能會覺得網頁出了問題,而其實這都可能會覺得網頁出了問題,而其實這都是正常的現象。是正常的現象。

Page 25: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(1)(1)

Login.aspxLogin.aspx Part I 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>

Page 26: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(2)(2)

Login.aspxLogin.aspx Part II 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>

Page 27: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (3)(3)

Login.aspxLogin.aspx Part III 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

Page 28: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (4)(4)

Login.aspxLogin.aspx Part VI Part VIFunction 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()

Page 29: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (5)(5)

Login.aspxLogin.aspx Part V 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>

Page 30: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(6)(6)

表單的佈置表單的佈置 要完成 要完成 Login.aspx Login.aspx 網頁,首先要提供一網頁,首先要提供一個輸入表單,本書所提供的輸入表單含個輸入表單,本書所提供的輸入表單含有三個輸入欄位 有三個輸入欄位 -- -- 帳號、密碼、記得我,帳號、密碼、記得我,而 它 們 分 別 命 名 為 而 它 們 分 別 命 名 為 AccountAccount、、 PasswordPassword、、 RememberMeRememberMe。。

Page 31: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(7)(7)

Login_Click Login_Click 事件程序事件程序:: Part IPart I

「登入」鈕所對應的事件程序 「登入」鈕所對應的事件程序 Login_ClickLogin_Click

If Verify( Account.Text, Password.Text ) Then

FormsAuthentication.RedirectFromLoginPage(Account.Text, RememberMe.Checked)

Else

Msg.Text = "帳號或密碼錯誤 , 請重新輸入 !"End If

Page 32: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(8)(8)

Login_Click Login_Click 事件程序事件程序:: Part Part IIII

如果已經通過檢驗,則接著呼叫 如果已經通過檢驗,則接著呼叫 FormsAuthentication.RedirectFromLoginPage FormsAuthentication.RedirectFromLoginPage 方法,如下:方法,如下:

FormsAuthentication.RedirectFromLoginPage(Account.Text, RememberMe.Checked)

Page 33: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理(9)(9)

Verify Verify 函數函數 為 了 檢 驗 帳 號 及 密 碼 是 否 通 過 驗為 了 檢 驗 帳 號 及 密 碼 是 否 通 過 驗

證,證, VerifyVerify 函數會開啟函數會開啟 Users.mdbUsers.mdb 資料資料庫,然後利用以下庫,然後利用以下 SQLSQL 指令選取資料:指令選取資料:

Select * From Users Where UserID=' 帳號 ' And Password=' 密碼 '

Page 34: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (1(10)0)

Hello.aspx Part IHello.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>

Page 35: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (1(10)0)

Hello.aspx Part IIHello.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>

Page 36: ASP.NET  網頁製作教本  –  從基本語法學起

瞭解 瞭解 Login.aspx Login.aspx 的工作原理的工作原理 (1(11)1)

mdb mdb 資料庫的保全 資料庫的保全 為 為 mdb mdb 資料庫進行「加密」工作,而資料庫進行「加密」工作,而其中建立 其中建立 Connection 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()

Page 37: ASP.NET  網頁製作教本  –  從基本語法學起

即時加入會員即時加入會員 (1)(1)

範例網頁的組成範例網頁的組成 : :

Member.aspx會員登錄

Forget.aspx寄出登錄資料

舊會員,但是忘了密碼

( ):實線 使用者操作的動作 ( ):虛線 程式的動作

加入

UsersPwd.mdb

讀取

寄出寫入

Page 38: ASP.NET  網頁製作教本  –  從基本語法學起

即時加入會員即時加入會員 (2)(2)

操作說明操作說明 (1)(1) :: http://localhost/kjaspx/ch15Member/Member.aspx

Page 39: ASP.NET  網頁製作教本  –  從基本語法學起

即時加入會員即時加入會員 (3)(3) 操作說明操作說明 (2)(2) ::

如果是舊會員但忘了自己的資料,則可如果是舊會員但忘了自己的資料,則可以按下「舊會員,但是忘了密碼」進入以按下「舊會員,但是忘了密碼」進入Forget.aspx Forget.aspx 網頁:網頁:

Page 40: ASP.NET  網頁製作教本  –  從基本語法學起

即時加入會員即時加入會員 (4)(4) Forget.aspx #52Forget.aspx #52 ~~ 6363

#52 mail.Subject = " 您的會員資料 "#53 mail.To = Rd.Item("Email")

#54 mail.From = "[email protected]" ' 改成系統維護者的 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)

Page 41: ASP.NET  網頁製作教本  –  從基本語法學起

15-2 15-2 計費網頁計費網頁

Page 42: ASP.NET  網頁製作教本  –  從基本語法學起

fee00.aspx fee00.aspx 網頁之架構 網頁之架構 Part IPart 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>

 

Page 43: ASP.NET  網頁製作教本  –  從基本語法學起

fee00.aspx fee00.aspx 網頁之架構 網頁之架構 Part IIPart II

<Html>

<Body>

<H2> 這是個計費網頁 ...<HR></H2>

<asp:Label runat="server" id="Msg" ForeColor=Red/>

<p>

... 接著根據此一「網頁」之計費點數,扣除此一「帳號」的點數 <p>

<HR>

</Body>

</Html>

Page 44: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (1)(1)

範例網頁的組成範例網頁的組成 Charge/

Charge.aspx計費程式

Values.aspx網頁目錄

讀取

ValList.aspx計費統計

選取計費網頁

Users.mdb

寫入

讀取

計費統計回計費首頁

Charge/Tips??.htm計費網頁

輸出

Page 45: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (2)(2) 操作說明操作說明 (1)(1) :瀏覽 :瀏覽 Values.aspx Values.aspx 網頁 網頁

, 滑鼠移到此一連結 暫時不要按下

狀態列顯示的網址是 Charge.aspx, 不是 Tips01.htm

Page 46: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (3)(3) 操作說明操作說明 (2)(2) :按下 :按下 Tips01.htm Tips01.htm 連連結 結

Charge/Charge.aspx?Page=Tips01.htm

內容為 Charge 目錄的 $xo-Tips01.htm

Page 47: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (4)(4) 操作說明操作說明 (3)(3) :回到 :回到 Values.aspx Values.aspx 網頁,然網頁,然

後依序按下 後依序按下 Tips02.aspxTips02.aspx、、 Tips04.aspxTips04.aspx、、 Tips08.aTips08.aspx spx 連結,接著再按下 「計費統計」鈕進入 連結,接著再按下 「計費統計」鈕進入 ValList.aspx ValList.aspx 網頁。 網頁。

Page 48: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (5)(5)

Pages Pages 資料表的結構: 資料表的結構:

欄位 資料類型 其他屬性網頁 文字 欄位大小=255

介紹 備忘 ─

點數 整數

Page 49: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (6)(6)

Pages Pages 資料表其內容如下:資料表其內容如下: 網頁 介紹 點數Tips01.htm 如何將 .flc 動畫檔放在某一個 hWnd 之中播放? 5

Tips02.htm 如何改變系統預設的日期格式? 4

Tips03.htm 如何利用程式拉下 ComboBox? 3

Tips04.htm 如何改變桌面的圖片? 5

Tips05.htm 在 ListBox 之中, 如何偵測滑鼠所在位置的選項? 4

Tips06.htm 如何啟動撥號網路中的連線? 3

Tips07.htm 如何取得特殊資料夾的所在目錄? 6

Tips08.htm 如何在 Windows 啟動時自動執行某一個程式? 5

Tips09.htm 如何在DOS程式結束執行時,自動將其關閉? 4

Tips10.htm 如何讓使用者自行輸入方程式, 並且計算其結果? 3

Page 50: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (7)(7)

Charges Charges 資料表的結構: 資料表的結構:

欄位 資料類型 其他屬性UserID 文字 欄位大小=50

網頁 文字 欄位大小=255

點數 整數 ─

時間 日期時間 預設值=Now()

Page 51: ASP.NET  網頁製作教本  –  從基本語法學起

..htm htm 網頁的計費網頁的計費 (8)(8)

Charges Charges 資料表其內容如下:資料表其內容如下: UserID 網頁 點數 時間kjwang Tips01.htm 5 2002/3/17 下午 01:32:53

kjwang Tips02.htm 4 2002/3/17 下午 01:32:55

kjwang Tips04.htm 5 2002/3/17 下午 01:32:57

kjwang Tips08.htm 5 2002/3/17 下午 01:32:59

Page 52: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (8)(8) ..htmhtm 檔案的命名檔案的命名::一定要為一定要為 ..htmhtm 檔案取別人無法猜到的檔檔案取別人無法猜到的檔案名稱,例如本節的計費網頁 案名稱,例如本節的計費網頁 $$xo-xo-Tips01.htmTips01.htm~~ $xo-Tips10.htm$xo-Tips10.htm ,,就是為了讓別人無法猜出,所以特別在就是為了讓別人無法猜出,所以特別在原檔案名稱之前加上 原檔案名稱之前加上 $$xo- xo- 這個奇怪這個奇怪的名字 。的名字 。

Page 53: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (9)(9)

進入進入 Charge.aspxCharge.aspx 網頁時,我們可以根據網頁時,我們可以根據以下資訊得知帳號及上網者所瀏覽的網以下資訊得知帳號及上網者所瀏覽的網頁:頁:

User.Identity.Name ' 帳號Request("Page") ' Page 參數值 , 也就是被瀏覽的網頁

Page 54: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (10)(10)

而判斷此一帳號是否瀏覽過此一網頁的而判斷此一帳號是否瀏覽過此一網頁的程式如下:程式如下:

#15 ' 判斷此一帳號是否曾經讀過此一網頁

#16 SQL = "Select * From Charges Where " & _

#17 "UserID='" & User.Identity.Name & "' And " & _

#18 " 網頁 ='" & Request("Page") & "'"

#19 Cmd = New OleDbCommand( SQL, Conn )

#20 Rd = Cmd.ExecuteReader()

#21

#23 If Not Rd.Read() Then ' 找不到 , 表示此一帳號尚未瀏覽過此一網頁

Page 55: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (11)(11) 從資料庫中讀出此一帳號的剩餘點數及從資料庫中讀出此一帳號的剩餘點數及此一網頁之點數,如下:此一網頁之點數,如下:

#26 ' 讀出此一網頁之點數 , 及此一帳號之剩餘點數#27 SQL = "Select * From Pages Where " & _

#28 "網頁 ='" & Request("Page") & "'"#29 Cmd = New OleDbCommand( SQL, Conn )

#30 Rd = Cmd.ExecuteReader()

#31 If Rd.Read() Then 點數 = Rd.Item("點數 ") #32 Rd.Close()

#33 SQL = "Select * From Users Where " & _

#34 "UserID='" & User.Identity.Name & "'"

#35 Cmd = New OleDbCommand( SQL, Conn )

#36 Rd = Cmd.ExecuteReader()

#37 If Rd.Read() Then 剩餘點數 = Rd.Item("點數 ") #38 Rd.Close()

Page 56: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (12)(12) 若「點數」大於若「點數」大於 00 且「剩餘點數」小於且「剩餘點數」小於 00 ,,

則表示此一帳號尚未瀏覽此一網頁且此則表示此一帳號尚未瀏覽此一網頁且此一帳號的剩餘點數已經變成負數了一帳號的剩餘點數已經變成負數了 (( 超用超用了了 )) ,那麼顯示「對不起,那麼顯示「對不起 , , 您的點數已經您的點數已經用盡用盡 !! 」,否則下載網頁到瀏覽器,程式」,否則下載網頁到瀏覽器,程式如下:如下:

#57 If 點數 > 0 And 剩餘點數 <= 0 Then

#58 Response.Write( "<H2>對不起 , 您的點數已經用盡 !<HR><H2>" )

#59 Else

#60 Response.WriteFile( Server.MapPath("$xo-" & Request("Page")) )

#61 End If

Page 57: ASP.NET  網頁製作教本  –  從基本語法學起

htm htm 網頁的計費網頁的計費 (13)(13) 在扣點方面,所撰寫的程式如下:在扣點方面,所撰寫的程式如下:

#41 ' 將「 UserID 、網頁、點數」記錄於 Charges 資料表#42 SQL = "Insert Into Charges (UserID, 網頁 , 點數 ) " & _#43 "Values ( '" & User.Identity.Name & "', '" & _

#44 Request("Page") & "', " & 點數 & ")"#45 Cmd = New OleDbCommand( SQL, Conn )

#46 Cmd.ExecuteNonQuery()

#47

#48 ' 扣除 Users 資料表的點數#49 SQL = "Update Users Set 點數 = 點數 -" & 點數 & _#50 " Where UserID='" & User.Identity.Name & "'"

#51 Cmd = New OleDbCommand( SQL, Conn )

#52 Cmd.ExecuteNonQuery()