ASP.NET網頁設計範例教本

Download Report

Transcript ASP.NET網頁設計範例教本

Ch10 網頁間的資料分享:
Application Session 與Cookies的處理
WEB程式設計
大綱
 Web應用程式
 網頁間的資料分享
 Application物件的使用
 Session物件的使用
 Global.asax檔案的使用
 Cookies的處理
 Cookies的應用
2
Web應用程式的基礎-說明
 Web應用程式是指網站目錄和其子目錄執
行檔案的能力,IIS支援ASP.NET、ASP、
ISAPI、CGI、IDC與SSI應用程式,能夠設
定應用程式的執行權限,也就是檔案所在
目錄的權限,以Web應用程式來說是【指
令】和【執行】權限。
3
Web應用程式的基礎-ASP.NET應用程式
 ASP.NET技術的Web應用程式就是建立
ASP.NET應用程式,屬於一種.NET
Framework應用程式。
 這是一種完全在伺服端執行的應用程式,
ASP.NET應用程式是由一些程式檔案組成,
當我們在Web伺服器的虛擬目錄建立
ASP.NET程式檔案和設定檔案Global.asax,
就是在建立ASP.NET應用程式。
4
Web應用程式的基礎-圖例
 每一個應用程式有一
個Global.asax檔案,
可以建立一個
Application物件
 每一個進入應用程式
的使用者都擁有獨立
的Session物件
5
網頁間的資料分享
 ASP.NET 使 用 HTTP 通 訊 協 定 , 其 特 性 就 是
ASP.NET程式並不是在客戶端的電腦執行,而是
在伺服端執行,客戶端主要的目的只是讀取網頁
內容或提供使用者輸入資料的介面。
 在Web伺服器的伺服端,事實上,對於同時連線
網站的使用者幾乎無法獲得任何使用者狀態,因
為網站各網頁間並沒有什麼關連,ASP.NET程式
碼的變數只限在同一個ASP.NET程式存取,而無
法橫越其它的ASP.NET程式。
??所以,如何將資料傳送給下一個網頁呢??
6
在網頁間分享資料
 網站的分享資料可以分為2種,如下所示:
 分享給網站所有的使用者:在ASP.NET程式就
是所謂的Application變數,例如:目前線上的
使用者數。
 針對每位使用者的專屬資料:在ASP.NET程式
就是Session變數,例如:登入使用者的權限。
7
網頁間資料分享的方法
 ASP.NET程式在網頁間傳遞資料的方法有很
多種,整理如下所示:
 利用Web表單將表單處理的ASP.NET程式指定成
其它ASP.NET程式,如此就可以將欄位資料傳遞
到其它ASP.NET程式。
 利用Request物件配合表單或網址URL參數,將
欄位資料和參數傳到其它的ASP.NET程式。
 利用Application和Session物件。
 利用Cookies直接保留在客戶端電腦,以便
ASP.NET程式取得所需的資訊。
8
網頁間資料分享的方法
 上頁的分享方法的適用性:
 Cookies通常是儲存一些客戶端使用者的選擇
和狀態
 對於Web應用程式,若是程式間的資料分享,
主要是使用儲存在伺服端的Application和
Session物件
9
範例1:利用表單方式來資料分享
 將每一個看起來好像是一
1. <!--程式範例Ex10_01.aspx:使用WEB控制項(panel)
-->
頁的網頁以Panel來裝載 2. <%@ Page Language="VB" %>
 以這個範例而言,共有三 3. <html>
<head>
個畫面要呈現及要求輸入 4.
5.
<title>Ex10_01:使用WEB控制項+Panel</title>
資料,所以,就有三個
6.
<script language="Vb" runat="server">
panel來裝載,另外,有 7.
Sub Page_Load(s as object, e as eventargs)
第四個panel是為了要呈 8.
Panel1.visible="true"
9.
Panel2.visible="false"
現所有之前輸入的資料
10.
Panel3.visible="false"
 這個方法,從頭到尾,都 11. Panel4.visible="false"
在同一個程式中,所以, 12. End Sub
變數一直都存在著,並不 13. Sub Button1_click(s as object, e as eventargs)
If Page.IsValid Then
需要做網頁間的資料傳輸。14.
15.
16.
17.
18.
19.
20.
21.
panel1.visible="false"
panel2.visible="true"
panel3.visible="false"
panel4.visible="false"
End If
Label1.Text = member_id.Text
End Sub
10
範例1:利用表單方式來資料分享(續)
22. Sub Button2_click( s as object, e as
eventargs)
23. panel1.visible = "true“
24. panel2.visible = "false"
25. panel3.visible = "false"
26. panel4.visible = "false“
27. End Sub
28. Sub Button3_click(s as object, e as
eventargs)
29. If work1.Checked = true Then
30. Label2.Text = work1.Text
31. End If
32. If work2.Checked = true Then
33. Label2.text = work2.Text
34. End If
35. If work3.Checked = true Then
36.
Label2.text = work3.Text
37. End If
38. If work4.Checked = true Then
39. Label2.text = work4.Text
40. End If
41. If work5.Checked = true Then
42.
Label2.text = work5.Text
43. End If
44. If male.Checked = true Then
45.
Label3.Text = "先生, 你好!"
46. End If
47. If female.Checked = true Then
48. Label3.Text = "女士, 妳好!"
49. End If
50. panel1.visible = "false"
51. panel2.visible = "false"
52. panel3.visible = "true"
53. panel4.visible = "false"
54. End Sub
55. Sub Button4_click( s as object, e as
eventargs)
56. panel1.visible = "false"
57. panel2.visible = "true"
58. panel3.visible = "false"
59. panel4.visible = "false"
60. End Sub
11
範例1:利用表單方式來資料分享(續)
61. Sub Button5_click(s as object, e as
eventargs)
62. Dim i as integer
63. panel1.visible = "false"
64. panel2.visible = "false"
65. panel3.visible = "false"
66. panel4.visible = "true"
67. For i = 0 to e_news.Items.Count -1
68.
If e_news.Items(i).Selected Then
69.
If Label4.Text="" Then
70.
Label4.Text += e_news.Items(i).Text
71.
Else
72.
Label4.Text += ", " &
e_news.Items(i).Text
73.
End If
74.
End If
75. Next
76. End Sub
77. Sub Button6_click(s as object, e as
eventargs)
78.
Response.Redirect("http://mis2.nkmu.edu.t
w/wangdaj")
79. End Sub
80. </script>
81. </head>
12
範例1:利用表單方式來資料分享(續)
82. <body>
83. <form runat="server">
84.
<asp:Panel Id="panel1" Runat="server" backColor="Pink">
85.
<center><H4>會員登入</h4></center>
86.
<hr>
87.
會員帳號 : <asp:TextBox Id="member_id" runat="server"/><p>
88.
<asp:RequiredFieldValidator Id="required_id"
89.
ControlToValidate="member_id"
90.
ErrorMessage="請輸入帳號!"
91.
runat="server" />
92.
密 碼 : <asp:TextBox Id="member_pass" TextMode="Password" runat="server"/><p>
93.
<asp:RequiredFieldValidator Id="required_pass"
94.
ControlToValidate="member_pass"
95.
ErrorMessage="請輸入密碼!"
96.
runat="server" />
97.
<asp:CompareValidator Id="compare_pass"
98.
ControlToValidate="member_pass"
99.
ValueToCompare="123"
100.
Type="String"
101.
ErrorMessage="你的密碼錯誤,是123!"
102.
runat="server" />
103.
<asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" />
104. </asp:Panel>
13
範例1:利用表單方式來資料分享(續)
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
<asp:Panel id="panel2" runat="server" backcolor="lightgray">
<center><h4>個人資料</h4></center>
<hr>
職業別:
<asp:RadioButton id="work1" Text="軍"
GroupName="work" runat="server" />
<asp:RadioButton id="work2" text="公"
GroupName="work" runat="server" />
<asp:RadioButton id="work3" text="教"
GroupName="work" runat="server" />
<asp:RadioButton id="work4" text="工"
GroupName="work" runat="server" />
<asp:RadioButton id="work5" text="其他"
GroupName="work" runat="server" />
<br>
性 別:
<asp:RadioButton id="male" Text="先生"
GroupName="fm" runat="server" />
<asp:RadioButton id="female" Text="女士"
GroupName="fm" runat="server" />
<asp:button id="button2" runat="server" Text="上一步" OnClick="Button2_click" />
<asp:button id="button3" runat="server" Text="下一步" OnClick="Button3_click" />
</asp:Panel>
14
範例1:利用表單方式來資料分享(續)
128. <asp:Panel id="panel3" runat="server" backcolor="lightyellow">
129.
<center><h4>訂閱的電子報類型</h4></center>
130.
<hr>
131.
<asp:CheckBoxList Id="e_news" runat="server" RepeatColumns="3">
132.
<asp:ListItem Text="投資理財" />
133.
<asp:ListItem Text="體育" />
134.
<asp:ListItem Text="娛樂新聞" />
135.
<asp:ListItem Text="科技新知" />
136.
<asp:ListItem Text="文學" />
137.
<asp:ListItem Text="網路遊戲" />
138.
</asp:CheckBoxList>
139.
<asp:button id="button4" runat="server" Text="上一步" OnClick="Button4_click" />
140.
<asp:button id="button5" runat="server" Text="下一步" OnClick="Button5_click" />
141. </asp:Panel>
142. <asp:Panel id="panel4" runat="server" backcolor="lightgreen">
143. <center><h4><asp:Label id="Label1" runat="server" />
144.
<asp:Label id="Label3" runat="server" />
145.
</h4>
146.
</center>
147.
<hr>
148.
你的工作類型是: <asp:Label id="Label2" runat="server" /><br>
149.
你訂閱的電子報類型是: <asp:Label id="Label4" runat="server" /><br>
150.
<asp:button id="button6" runat="server" Text="回首頁" OnClick="Button6_click" />
15
151. </asp:Panel>
152. </form>
範例2:利用Request物件配合表單或網址URL參數
 Ex10_02_01.html
1. <!--程式範例Ex10_02_01.html:使用HTML控制項+POST -->
2. <html>
3. <head>
4. <title>Ex10_02:使用HTML控制項+POST</title>
5. </head>
6. <body>
7. <form name="f1" method="POST" action="Ex10_02_02.aspx">
8.
<center><H4>會員登入</h4></center>
9.
<hr>
10. 會員帳號 : <Input type="TEXT" name="mid"><br>
11. 密 碼 : <Input type="PASSWORD" name="mpass" ><br>
12. <Input type="submit" name="b1" Value="下一步"><br>
13. </form>
14. </body>
15.</html>
16
範例2:利用Request物件配合表單或網址URL參數

Ex10_02_02.aspx
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<!--程式範例Ex10_02_02.aspx:使用HTML控制項+POST -->
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_02:使用HTML控制項+POST</title>
</head>
<body>
<% Dim name, pass As String
name = Request.Form("mid")
Response.Write(name & "ok1<br>")
pass = Request.Form("mpass")
Response.Write(pass & "ok2<br>")
%>
<form method="POST" action="Ex10_02_03.aspx">
<Input Type="Hidden" name="member_id" Value="<%=name%>" >
<Input Type="Hidden" name="member_pass" Value="<%=pass%>" >
<center><H4>個人資料</h4></center>
<hr>
職業別:
<Input type="RADIO" id="work1" Value="軍" Name="work" runat="server" />軍
<Input type="Radio" id="work2" Value="公" Name="work" runat="server" />公
<Input type="Radio" id="work3" Value="教" Name="work" runat="server" />教
<Input type="Radio" id="work4" Value="工" Name="work" runat="server" />工
<Input type="Radio" id="work5" Value="其他" Name="work" runat="server" />其他
<br>
性 別:
<Input type="Radio" id="male" Value="先生" Name="fm" runat="server" />先生
<Input type="Radio" id="female" Value="女士" Name="fm" runat="server" />女士
<Input type="submit" Value="下一步" >
</form>
</body>
</html>
17
範例2:利用Request物件配合表單或網址URL參數

Ex10_02_03.aspx
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<!--程式範例Ex10_02_03.aspx:使用HTML控制項+POST -->
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_02:使用HTML控制項+POST</title>
</head>
<body>
<%Dim name, pass, w, s As String
name = Request.Form("member_id")
Response.Write(name & "<br>")
pass = Request.Form("member_pass")
Response.Write(pass & "<br>")
w = Request.Form("work")
Response.Write(w & "<br>")
s = Request.Form("fm")
Response.Write(s & "<br>")
%>
<form method="get" action="Ex10_02_04.aspx">
<Input Type="Hidden" name="member_id" Value="<%=name%>" >
<Input Type="Hidden" name="member_pass" Value="<%=pass%>" >
<Input Type="Hidden" name="work" Value="<%=w%>" >
<Input Type="Hidden" name="fm" Value="<%=s%>" >
<center><h4>訂閱的電子報類型</h4></center>
<hr>
<Input type="CHECKBOX" name="e_news1" Value="投資理財" >投資理財
<Input type="CHECKBOX" name="e_news2" Value="體育" >體育
<Input type="CHECKBOX" name="e_news3" Value="娛樂新聞" >娛樂新聞
<Input type="CHECKBOX" name="e_news4" Value="科技新知" >科技新知
<Input type="CHECKBOX" name="e_news5" Value="文學" >文學
<Input type="CHECKBOX" name="e_news6" Value="網路遊戲" >網路遊戲
<Input type="submit" Value="下一步" >
</form>
</body>
</html>
18
範例2:利用Request物件配合表單或網址URL參數
 Ex10_02_04.aspx
1. <!--程式範例Ex10_02_04.aspx:使用HTML控制項
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
+POST -->
<html>
<head>
<title>Ex10_02:使用HTML控制項+POST</title>
</head>
<body>
<%
Dim name, pass, w, s As String
Dim e1, e2, e3, e4, e5, e6 As String
name = Request.QueryString("member_id")
Response.Write("姓名: " & name & "<br>")
pass = Request.QueryString("member_pass")
Response.Write("密碼: " & pass & "<br>")
w = Request.QueryString("work")
Response.Write("工作別: " & w & "<br>")
s = Request.QueryString("fm")
Response.Write("性別: " & s & "<br>")
e1= Request.QueryString("e_news1")
e2= Request.QueryString("e_news2")
e3= Request.QueryString("e_news3")
e4= Request.QueryString("e_news4")
e5= Request.QueryString("e_news5")
e6= Request.QueryString("e_news6")
Response.Write("訂閱: <br>")
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
If e1 <> "" Then
Response.Write(e1 & ", ")
End If
If e2 <> "" Then
Response.Write(e2 & ", ")
End If
If e3 <> "" Then
Response.Write(e3 & ", ")
End If
If e4 <> "" Then
Response.Write(e4 & ", ")
End If
If e5 <> "" Then
Response.Write(e5 & ", ")
End If
If e6 <> "" Then
Response.Write(e6)
End If
Response.Write("<br>")
%>
</body>
</html>
19
Cookies的基礎-說明
 Cookies的英文意義是小餅乾,源於這些儲存在客
戶端電腦的檔案尺寸都很小,Cookies儲存在瀏覽
程式所在的電腦,所以並不會浪費伺服器的資源,
只需執行ASP.NET程式進入Web應用程式時,檢
查客戶端是否儲存Cookie,在取得Cookie保留的
資訊後,就可以輕鬆建立複雜的Web應用程式。
 當Web應用程式需要使用者的瀏覽記錄,例如:使用
者是否曾經瀏覽過網站,或是一些個人資訊,此時
Cookies是一個最佳的解決方案
20
Cookies的基礎-儲存位置
 在「C:\Documents and Settings\Joe
Chen\Local Settings\Temporary Internet Files」
的快取資料夾,可以看到一大堆網站保留在客
戶端電腦的Cookie檔案,如下圖所示:
21
新增Cookie
 Cookie是Response物件的Cookie集合物件,可
以使用名稱存取Cookie值,新增Cookie是使用
Response物件的Cookies屬性來新增Cookie,其
程式碼如下所示:
Response.Cookies("UserName").Value = "陳會安"
 在新增Cookie後還需要設定Cookie的Expires屬性,
如下所示:
Response.Cookies("UserName").Expires = _
DateAdd("D", 10, Today)
 程式碼使用DateAdd()函數加上10天,計算出
Cookie過期天數,當日期到後Cookie就會刪除。
22
取得Cookie的值
 如果客戶端電腦擁有Cookie,我們可以使用
Request物件的Cookies集合物件取得指定
Cookie的值,其程式碼如下所示:
name = Request.Cookies("UserName").Value
 程式碼取得Cookie名稱UserName的值,將它指
定給變數name。
23
刪除Cookie
 如果客戶端的Cookie不再需要,我們可以
使用程式碼刪除Cookie,刪除方式只需將
Expires屬性設定成過期即可,其程式碼如
下所示:
Response.Cookies("UserName").Expires = _
DateAdd("D", -365, Today)
 程式碼將有效期限設定為一年前,因為
Cookie已經過期,換句話說,就是刪除
Cookie。
24
多鍵Cookie的使用-建立
 Cookie是一種目錄結構的集合物件,在同一個名稱
Cookie下允許擁有不同的Key鍵名,換句話說,同
一個Cookie名稱就可以儲存多個資料,如下:
Response.Cookies("User")("UserName") = "陳會安"
Response.Cookies("User")("Password") = "1234"
Response.Cookies("User").Expires = _
DateAdd("D", 10, Today)
 程式碼新增名為User的Cookie,這個Cookie擁有2
個鍵名UserName和Password,分別儲存使用者名
稱和密碼,最後設定Cookie期限屬性Expires時只
需使用Cookie名稱。
25
多鍵Cookie的使用-取出與刪除
 多鍵Cookie如同一個陣列,取得Cookie值時不只
需要指定名稱,還需要指定鍵名,如下所示:
name = Request.Cookies("User")("UserName")
pass = Request.Cookies("User")("Password")
 多鍵Cookie的刪除只需使用Cookie名稱設定
Expires屬性就可以刪除,如果只刪除Cookie其中
的一個鍵名,只需將該鍵名設成空字串,如下所
示:
Response.Cookies("User")("Password") = ""
26
Cookies的基本應用
 Cookies在網站實作上的應用相當多,使用
Cookies保留的資料大都屬於幾個方面,如下所示:
 個人資訊:使用Cookies保留個人的資訊,例如:姓名、
地址、時區、帳號和造訪網站的次數。
 個人化的內容:Cookies可以定製個人化的網站外觀和
個人偏好的網站內容,或者只提供使用者有興趣的資
訊。
 網站購物車:線上購物車需要保留使用者選擇的商品,
Cookies就可以用來記錄這些選購的商品。
27
儲存使用者的瀏覽記錄
 如果使用者在瀏覽網站時,一進入網頁就馬上顯
示歡迎再次到訪的訊息,使用者可能會驚訝於這
個網站怎麼如此Smart,事實上,該網站早已經
在您第一次進入網頁時,就已經在電腦留下到訪
的記錄,這就是Cookies的功能。
 ASP.NET程式檢查客戶端的電腦是否已經留下使
用者名稱的Cookie,其程式碼如下所示:
name = Request.Cookies("UserName").Value
 如果變數name有內容,表示已經建立Cookies,就直接顯
示歡迎使用者的訊息,否則顯示Web表單輸入使用者名稱,
然後建立Cookie儲存使用者名稱。
28
範例3:利用Cookies來傳送網頁間資料











































Ex10_03_02.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_03_02:使用Cookies</title>
<script language="Vb" runat="server">
Sub Page_Load(s as object, e as eventargs)
Dim name As String
name = Request.Cookies("UserName").Value
Response.Write(name & "<br>")
End Sub
Sub Button2_click( s as object, e as eventargs)
Response.Redirect("Ex10_03_01.aspx")
End Sub
Sub Button3_click(s as object, e as eventargs)
If work1.Checked = true Then
Response.Cookies("work").Value = work1.Text
Response.Cookies("work").Expires = DateAdd("D", 1, Today)
End If
If work2.Checked = true Then
Response.Cookies("work").Value = work2.Text
Response.Cookies("work").Expires = DateAdd("D", 1, Today)
End If
If work3.Checked = true Then
Response.Cookies("work").Value = work3.Text
Response.Cookies("work").Expires = DateAdd("D", 1, Today)
End If
If work4.Checked = true Then
Response.Cookies("work").Value = work4.Text
Response.Cookies("work").Expires = DateAdd("D", 1, Today)
End If
If work5.Checked = true Then
Response.Cookies("work").Value = work5.Text
Response.Cookies("work").Expires = DateAdd("D", 1, Today)
End If
If male.Checked = true Then
Response.Cookies("s").Value = "先生, 你好!"
Response.Cookies("s").Expires = DateAdd("D", 1, Today)
End If
If female.Checked = true Then
Response.Cookies("s").Value = "女士, 妳好!"
Response.Cookies("s").Expires = DateAdd("D", 1, Today)
End If
































Response.Redirect("Ex10_03_03.aspx")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel2" runat="server" backcolor="lightgray"
Visible="true">
<center><h4>個人資料</h4></center>
<hr>
職業別:
<asp:RadioButton id="work1" Text="軍"
GroupName="work" runat="server" />
<asp:RadioButton id="work2" text="公"
GroupName="work" runat="server" />
<asp:RadioButton id="work3" text="教"
GroupName="work" runat="server" />
<asp:RadioButton id="work4" text="工"
GroupName="work" runat="server" />
<asp:RadioButton id="work5" text="其他"
GroupName="work" runat="server" />
<br>
性 別:
<asp:RadioButton id="male" Text="先生"
GroupName="fm" runat="server" />
<asp:RadioButton id="female" Text="女士"
GroupName="fm" runat="server" />
<asp:button id="button2" runat="server" Text="上一步"
OnClick="Button2_click" />
<asp:button id="button3" runat="server" Text="下一步"
OnClick="Button3_click" />
</asp:Panel>
</form>
</body>
</html>

29
範例3:利用Cookies來傳送網頁間資料









Ex10_03_03.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_03_03:使用Cookies</title>
<script language="Vb" runat="server">
Sub Button4_click( s as object, e as eventargs)
Response.Redirect("Ex10_03_02.aspx")
End Sub






































Sub Button5_click(s as object, e as eventargs)
Dim i as integer
Dim news As String
news = ""
For i = 0 to e_news.Items.Count -1
If e_news.Items(i).Selected Then
If news= "" Then
news += e_news.Items(i).Text
Else
news += ", " & e_news.Items(i).Text
End If
End If
Next
Response.Cookies("e_news").Value = news
Response.Cookies("e_news").Expires = DateAdd("D", 1, Today)
Response.Redirect("Ex10_03_04.aspx")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel3" runat="server" backcolor="lightyellow" Visible="true">
<center><h4>訂閱的電子報類型</h4></center>
<hr>
<asp:CheckBoxList Id="e_news" runat="server" RepeatColumns="3">
<asp:ListItem Text="投資理財" />
<asp:ListItem Text="體育" />
<asp:ListItem Text="娛樂新聞" />
<asp:ListItem Text="科技新知" />
<asp:ListItem Text="文學" />
<asp:ListItem Text="網路遊戲" />
</asp:CheckBoxList>
<asp:button id="button4" runat="server" Text="上一步" OnClick="Button4_click" />
<asp:button id="button5" runat="server" Text="下一步" OnClick="Button5_click" />
</asp:Panel>
</form>
</body>
</html>
30
範例3:利用Cookies來傳送網頁間資料




































Ex10_03_04.aspx
<!--程式範例Ex10_03_04.aspx:使用Cookies -->
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_03_04:使用Cookies</title>
<script language="VB" runat="server">
Sub Page_Load(s as object, e as eventargs)
Label1.Text = Request.Cookies("UserName").Value
Label2.Text = Request.Cookies("work").Value
Label3.Text = Request.Cookies("s").Value
Label4.Text = Request.Cookies("e_news").Value
End Sub
Sub Button6_click(s as object, e as eventargs)
Response.Redirect("http://mis2.nkmu.edu.tw/wangdaj")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel4" runat="server" backcolor="lightgreen" Visible="true">
<center><h4><asp:Label id="Label1" runat="server" />
<asp:Label id="Label3" runat="server" />
</h4>
</center>
<hr>
你的工作類型是: <asp:Label id="Label2" runat="server" /><br>
你訂閱的電子報類型是: <asp:Label id="Label4" runat="server" /><br>
<asp:button id="button6" runat="server" Text="回首頁" OnClick="Button6_click" />
</asp:Panel>
</form>
</body>
</html>
31
範例3:利用Cookies來傳送網頁間資料












































Ex10_03_01.aspx
<!--程式範例Ex10_03_01.aspx:使用Cookies -->
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_03_01:使用Cookies</title>
<script language="Vb" runat="server">
Sub Button1_click(s as object, e as eventargs)
If Page.IsValid Then
Response.Cookies("UserName").Value = member_id.Text
Response.Cookies("UserName").Expires = DateAdd("D", 1, Today)
Response.Cookies("Passwd").Value = member_pass.Text
Response.cookies("Passwd").Expires = DateAdd("D", 1, Today)
Response.Redirect("Ex10_03_02.aspx")
End If
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel Id="panel1" Runat="server" backColor="Pink" Visible="True">
<center><H4>會員登入</h4></center>
<hr>
會員帳號 : <asp:TextBox Id="member_id" runat="server"/><p>
<asp:RequiredFieldValidator Id="required_id"
ControlToValidate="member_id"
ErrorMessage="請輸入帳號!"
runat="server" />
密 碼 : <asp:TextBox Id="member_pass" TextMode="Password" runat="server"/><p>
<asp:RequiredFieldValidator Id="required_pass"
ControlToValidate="member_pass"
ErrorMessage="請輸入密碼!"
runat="server" />
<asp:CompareValidator Id="compare_pass"
ControlToValidate="member_pass"
ValueToCompare="123"
Type="String"
ErrorMessage="你的密碼錯誤,是123!"
runat="server" />
<asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" />
</asp:Panel>
</form>
</body>
</html>
32
Session物件的基礎-說明
 當一位尚未建立Session物件的使用者執行
Web應用程式的ASP.NET程式,伺服器就
會自動建立一個新的Session物件,並且指
定唯一的Session ID編號。
 如果同時有多位使用者進入網站,每位使
用者都會指定一個專屬的Session ID編號,
以便建立不同的Session物件。
33
Session物件的基礎-圖例
34
Session變數的使用-說明
 Session變數是附屬在進入Web應用程式使
用者的Session期間,每一位使用者都擁有
一組專屬的Session變數,雖然每位使用者
的Session變數名稱相同,但是內容可能完
全不同,而且只有該使用者執行的
ASP.NET程式才能夠存取自己專屬的
Session變數。
35
Session變數的使用-方法與屬性
方法
說明
Abandon()
使用者建立的 Session 變數都會被清除掉,也就是說再也不能存
取 Session 變數值
Remove()
刪除指定的 Session 變數,參數是 Session 變數的名稱字串
屬性
說明
TimeOut
設定每一個 Session 期間的持續時間,以分鐘計,如果超過時
間,Session 變數將自動刪除
SessionID
取得使用者唯一的 Session 編號,這是一個唯讀屬性
36
Session變數的使用-存取
 在ASP.NET程式設定Session變數的程式碼,如
下所示:
Session("User_Pages")=Session("User_Pages")+1
 程式碼將Session變數User_Pages加一,Session
變數並不需要考慮資料衝突的問題,因為它是附
屬於使用者的Session期間,我們可以使用下列程
式碼取得使用者目前的Session ID,如下所示:
使用者的Session ID : <%=Session.SessionID%><br>
37
使用Session變數傳遞資料
 Session變數主要的用途是在網頁間分享資料,換句
話說。例如:儲存使用者資訊的名稱和密碼,首先
是使用者hueyan的Session變數,如下:
Session("UserName") = "hueyan"
Session("UserPassword") = "1234"
 只要使用者沒有超過Session期間或執行Abandon()
方法,在期間內執行其它ASP.NET程式都可以存取
上述Session變數的值,如下所示:
name = Session("UserName")
password = Session("UserPassword")
38
Session變數的使用限制
 在Session變數使用上的一些限制,如下:
 如果瀏覽程式為Internet Explorer 4.0x前的版本,
需要開啟Cookies功能。
 ASP.NET程式執行轉向指令,只限同一個Web
應用程式,不能轉向到其它的Web伺服器。
 如果是十分龐大的Web應用程式,擁有多個子目
錄,子目錄ASP.NET程式所建立的Session變數
是無法在其它子目錄中存取。
 Session變數的使用上比較浪費記憶體。
39
範例4:利用Sessiones來傳送網頁間資料

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Ex10_04_01.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_04_01:使用Session</title>
<script language="Vb" runat="server">
Sub Button1_click(s as object, e as eventargs)
If Page.IsValid Then
Session("UserName") = member_id.Text
Session("Passwd") = member_pass.Text
Response.Redirect("Ex10_04_02.aspx")
End If
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel Id="panel1" Runat="server" backColor="Pink" Visible="True">
<center><H4>會員登入</h4></center>
<hr>
會員帳號 : <asp:TextBox Id="member_id" runat="server"/><p>
<asp:RequiredFieldValidator Id="required_id"
ControlToValidate="member_id"
ErrorMessage="請輸入帳號!"
runat="server" />
密 碼 : <asp:TextBox Id="member_pass" TextMode="Password" runat="server"/><p>
<asp:RequiredFieldValidator Id="required_pass"
ControlToValidate="member_pass"
ErrorMessage="請輸入密碼!"
runat="server" />
<asp:CompareValidator Id="compare_pass"
ControlToValidate="member_pass"
ValueToCompare="123"
Type="String"
ErrorMessage="你的密碼錯誤,是123!"
runat="server" />
<asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" />
</asp:Panel>
</form>
</body>
</html>
40
範例4:利用Sessiones來傳送網頁間資料









Ex10_04_02.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_04_02:使用Cookies</title>
<script language="Vb" runat="server">
Sub Button2_click( s as object, e as eventargs)
Response.Redirect("Ex10_04_01.aspx")
End Sub



























Sub Button3_click(s as object, e as eventargs)
If work1.Checked = true Then
Session("work") = work1.Text
End If
If work2.Checked = true Then
Session("work") = work2.Text
End If
If work3.Checked = true Then
Session("work") = work3.Text
End If
If work4.Checked = true Then
Session("work") = work4.Text
End If
If work5.Checked = true Then
Session("work") = work5.Text
End If
If male.Checked = true Then
Session("s") = "先生, 你好!"
End If
If female.Checked = true Then
Session("s") = "女士, 妳好!"
End If
Response.Redirect("Ex10_04_03.aspx")
End Sub
</script>
</head>




























<body>
<form runat="server">
<asp:Panel id="panel2" runat="server" backcolor="lightgray"
Visible="true">
<center><h4>個人資料</h4></center>
<hr>
職業別:
<asp:RadioButton id="work1" Text="軍"
GroupName="work" runat="server" />
<asp:RadioButton id="work2" text="公"
GroupName="work" runat="server" />
<asp:RadioButton id="work3" text="教"
GroupName="work" runat="server" />
<asp:RadioButton id="work4" text="工"
GroupName="work" runat="server" />
<asp:RadioButton id="work5" text="其他"
GroupName="work" runat="server" />
<br>
性 別:
<asp:RadioButton id="male" Text="先生"
GroupName="fm" runat="server" />
<asp:RadioButton id="female" Text="女士"
GroupName="fm" runat="server" />
<asp:button id="button2" runat="server" Text="上一步"
OnClick="Button2_click" />
<asp:button id="button3" runat="server" Text="下一步"
OnClick="Button3_click" />
</asp:Panel>
</form>
</body>
</html>
41
範例4:利用Sessiones來傳送網頁間資料









Ex10_04_03.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_04_03:使用Cookies</title>
<script language="Vb" runat="server">
Sub Button4_click( s as object, e as eventargs)
Response.Redirect("Ex10_04_02.aspx")
End Sub






















Sub Button5_click(s as object, e as eventargs)
Dim i as integer
Dim news As String
news = ""
For i = 0 to e_news.Items.Count -1
If e_news.Items(i).Selected Then
If news= "" Then
news += e_news.Items(i).Text
Else
news += ", " & e_news.Items(i).Text
End If
End If
Next
Session("e_news") = news
Response.Redirect("Ex10_04_04.aspx")
End Sub
















</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel3" runat="server"
backcolor="lightyellow" Visible="true">
<center><h4>訂閱的電子報類型
</h4></center>
<hr>
<asp:CheckBoxList Id="e_news"
runat="server" RepeatColumns="3">
<asp:ListItem Text="投資理財" />
<asp:ListItem Text="體育" />
<asp:ListItem Text="娛樂新聞" />
<asp:ListItem Text="科技新知" />
<asp:ListItem Text="文學" />
<asp:ListItem Text="網路遊戲" />
</asp:CheckBoxList>
<asp:button id="button4" runat="server" Text="
上一步" OnClick="Button4_click" />
<asp:button id="button5" runat="server" Text="
下一步" OnClick="Button5_click" />
</asp:Panel>
</form>
</body>
</html>
42
範例4:利用Sessiones來傳送網頁間資料































<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_04_04:使用Session</title>
<script language="VB" runat="server">
Sub Page_Load(s as object, e as eventargs)
Label1.Text = Session("UserName")
Label2.Text = Session("work")
Label3.Text = Session("s")
Label4.Text = Session("e_news")
End Sub
Sub Button6_click(s as object, e as eventargs)
Response.Redirect("http://mis2.nkmu.edu.tw/wangdaj")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel4" runat="server" backcolor="lightgreen" Visible="true">
<center><h4><asp:Label id="Label1" runat="server" />
<asp:Label id="Label3" runat="server" />
</h4>
</center>
<hr>
你的工作類型是: <asp:Label id="Label2" runat="server" /><br>
你訂閱的電子報類型是: <asp:Label id="Label4" runat="server" /><br>
<asp:button id="button6" runat="server" Text="回首頁" OnClick="Button6_click" />
</asp:Panel>
</form>
</body>
</html>
43
Application物件的基礎-說明
 Application物件最主要的目的是建立
Application變數,這和一般的程式變數不同,
它是一個集合物件,Application變數提供進
入Web應用程式的每位使用者一個分享資
料的管道,因為Application變數的內容允許
網站的每位使用者存取其值。
44
Application物件的基礎-圖例
45
Application變數的使用-基本格式
 不論網站的Web應用程式同時有多少位使用者進
入,對於每一個Application變數,伺服端都只會
在記憶體保留一份資料,變數的基本格式如下:
Application("Page_Counter")=0
 變數名稱和一般ASP.NET程式使用的變數不太一
樣,這是一個字串"Page_Counter",加上
Application()表示為集合物件,上述程式碼將
Application變數Page_Counter設為零。
46
Application變數的使用-方法
方法
說明
Lock()
禁止其它使用者修改 Application 變數
Unlock()
允許其它使用者修改 Application 變數
47
Application變數的使用-存取
 如果2位使用者同時讀取Application變數並沒
有關係,如果一位更改,一位是讀取
Application變數,在這種情況下衝突就會發
生,為了避免這種情況,Application的2個方
法可以保障在同一時間內只允許一位使用者
存取Application變數,如下所示:
Application.Lock()
Application("Page_Counter")= _
Application("Page_Counter")+1
Application.Unlock()
48
範例5:利用Application來傳送網頁間資料

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Ex10_05_01.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_05_01:使用Application</title>
<script language="Vb" runat="server">
Sub Button1_click(s as object, e as
eventargs)
If Page.IsValid Then
Application.Lock()
Application("UserName") =
member_id.Text
Application("Passwd") =
member_pass.Text
Application.Unlock()
Response.Redirect("Ex10_05_02.aspx")
End If
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel Id="panel1" Runat="server"
backColor="Pink" Visible="True">
<center><H4>會員登入</h4></center>
21. <hr>
22.
會員帳號 : <asp:TextBox Id="member_id"
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
runat="server"/><p>
<asp:RequiredFieldValidator Id="required_id"
ControlToValidate="member_id"
ErrorMessage="請輸入帳號!"
runat="server" />
密 碼 : <asp:TextBox Id="member_pass"
TextMode="Password" runat="server"/><p>
<asp:RequiredFieldValidator
Id="required_pass"
ControlToValidate="member_pass"
ErrorMessage="請輸入密碼!"
runat="server" />
<asp:CompareValidator Id="compare_pass"
ControlToValidate="member_pass"
ValueToCompare="123"
Type="String"
ErrorMessage="你的密碼錯誤,是123!"
runat="server" />
<asp:button id="button1" runat="server"
Text="下一步" OnClick="Button1_click" />
</asp:Panel>
</form>
</body>
</html>
49
範例5:利用Application來傳送網頁間資料

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Ex10_05_02.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_05_02:使用Application</title>
<script language="Vb" runat="server">
Sub Button2_click( s as object, e as eventargs)
Response.Redirect("Ex10_05_01.aspx")
End Sub
Sub Button3_click(s as object, e as eventargs)
If work1.Checked = true Then
Application.Lock()
Application("work") = work1.Text
Application.Unlock()
End If
If work2.Checked = true Then
Application.Lock()
Application("work") = work2.Text
Application.Unlock()
End If
If work3.Checked = true Then
Application.Lock()
Application("work") = work3.Text
Application.Unlock()
End If
If work4.Checked = true Then
Application.Lock()
Application("work") = work4.Text
Application.Unlock()
End If
If work5.Checked = true Then
Application.Lock()
Application("work") = work5.Text
Application.Unlock()
End If
If male.Checked = true Then
Application.Lock()
Application("s") = "先生, 你好!"
Application.Unlock()
End If
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
If female.Checked = true Then
Application.Lock()
Application("s") = "女士, 妳好!"
Application.Unlock()
End If
Response.Redirect("Ex10_05_03.aspx")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel2" runat="server" backcolor="lightgray"
Visible="true">
<center><h4>個人資料</h4></center>
<hr>
職業別:
<asp:RadioButton id="work1" Text="軍"
GroupName="work" runat="server" />
<asp:RadioButton id="work2" text="公"
GroupName="work" runat="server" />
<asp:RadioButton id="work3" text="教"
GroupName="work" runat="server" />
<asp:RadioButton id="work4" text="工"
GroupName="work" runat="server" />
<asp:RadioButton id="work5" text="其他"
GroupName="work" runat="server" />
<br>
性 別:
<asp:RadioButton id="male" Text="先生"
GroupName="fm" runat="server" />
<asp:RadioButton id="female" Text="女士"
GroupName="fm" runat="server" />
<asp:button id="button2" runat="server" Text="上一步"
OnClick="Button2_click" />
<asp:button id="button3" runat="server" Text="下一步"
OnClick="Button3_click" />
</asp:Panel>
</form>
50
</body>
</html>
範例5:利用Application來傳送網頁間資料

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Ex10_05_03.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_05_03:使用Application</title>
<script language="Vb" runat="server">
Sub Button4_click( s as object, e as eventargs)
Response.Redirect("Ex10_05_02.aspx")
End Sub
Sub Button5_click(s as object, e as eventargs)
Dim i as integer
Dim news As String
news = ""
For i = 0 to e_news.Items.Count -1
If e_news.Items(i).Selected Then
If news= "" Then
news += e_news.Items(i).Text
Else
news += ", " & e_news.Items(i).Text
End If
End If
Next
Application.Lock()
Application("e_news") = news
Application.Unlock()
Response.Redirect("Ex10_05_04.aspx")
End Sub
27. </script>
28. </head>
29. <body>
30.
<form runat="server">
31.
<asp:Panel id="panel3" runat="server"
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
backcolor="lightyellow" Visible="true">
<center><h4>訂閱的電子報類型</h4></center>
<hr>
<asp:CheckBoxList Id="e_news" runat="server"
RepeatColumns="3">
<asp:ListItem Text="投資理財" />
<asp:ListItem Text="體育" />
<asp:ListItem Text="娛樂新聞" />
<asp:ListItem Text="科技新知" />
<asp:ListItem Text="文學" />
<asp:ListItem Text="網路遊戲" />
</asp:CheckBoxList>
<asp:button id="button4" runat="server" Text="上一步
" OnClick="Button4_click" />
<asp:button id="button5" runat="server" Text="下一步
" OnClick="Button5_click" />
</asp:Panel>
</form>
</body>
</html>
51
範例5:利用Application來傳送網頁間資料

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Ex10_05_04.aspx
<%@ Page Language="VB" %>
<html>
<head>
<title>Ex10_05_04:使用Application</title>
<script language="VB" runat="server">
Sub Page_Load(s as object, e as eventargs)
Label1.Text = Application("UserName")
Label2.Text = Application("work")
Label3.Text = Application("s")
Label4.Text = Application("e_news")
End Sub
Sub Button6_click(s as object, e as eventargs)
Response.Redirect("http://mis2.nkmu.edu.tw/wangdaj")
End Sub
</script>
</head>
<body>
<form runat="server">
<asp:Panel id="panel4" runat="server" backcolor="lightgreen" Visible="true">
<center><h4><asp:Label id="Label1" runat="server" />
<asp:Label id="Label3" runat="server" />
</h4>
</center>
<hr>
你的工作類型是: <asp:Label id="Label2" runat="server" /><br>
你訂閱的電子報類型是: <asp:Label id="Label4" runat="server" /><br>
<asp:button id="button6" runat="server" Text="回首頁" OnClick="Button6_click" />
</asp:Panel>
</form>
</body>
</html>
52
範例6:利用Application計算進入網頁的次數
1. <%@ Page Language="VB" %>
2. <html>
3. <head>
4. <title>範例6:計算進入本網頁次數(Application應用)</title>
5. </head>
6. <body>
7. <%
8. If IsNothing(Application("Page_Counter")) Then
9.
Application.Lock()
10. Application("Page_Counter") = 0
11. Application.Unlock()
12. End If
13. Application.Lock()
14. Application("Page_Counter") = Application("Page_Counter") + 1
15. Application.Unlock()
16.%>
17. 共有<%=Application("Page_Counter") %>人拜訪過這個網頁<br>
18. </body>
19.</html>
53
Global.asax檔案的使用
 Global.asax 是 一 個 選 擇 性 檔 案 , 在
ASP.NET的Web應用程式並不一定需要此
檔 案 , 除 非 Web 應 用 程 式 需 要 使 用 到
Application和Session物件的事件,因為這
些事件處理程序是位在Global.asax檔案。
54
Global.asax檔案的架構
 Global.asax檔案定義應用程式Application_Start、
Application_End、Session_Start和
Session_End的事件處理程序,檔案架構如下所
示:
<script language="VB" runat="Server">
Sub Application_Start(sender As Object, e As EventArgs)
End Sub
Sub Application_End(sender As Object, e As EventArgs)
End Sub
Sub Session_Start(sender As Object, e As EventArgs)
End Sub
Sub Session_End(Sender As Object, E As EventArgs)
End Sub
</script>
55
Application與Session物件的事
件處理程序
事件處理程序
說明
Application_Start 當第一位使用者進入 ASP.NET 程式時,Application_Start 的事件就觸
發,在觸發後就算有成千上萬位使用者進入網站都不會重新觸發,
除非 Web 伺服器關機。程序內容通常是屬於系統設定的 Application
變數,例如:初始的訪客計數
Application_End 當 Web 伺服器關機,此事件就會觸發
Session_Start
每一位使用者在執行 ASP.NET 程式前,就觸發此事件,如果有 50
位使用者,就觸發 50 次事件處理程式,每個事件是獨立觸發,如同
瀏覽網頁一般,並不會互相影響,程序內容通常是一些使用者專屬
Session 變數的初始設定
Session_End
使用者在預設的 20 分鐘內沒有進入其它的 ASP.NET 程式,就會觸
發此事件,這個時間是由 TimeOut 屬性設定,程序內容並沒有辦法
處理已經離開網站的使用者,通常屬於一些善後用途的程式碼,例
如:將 Session 變數存入資料庫或文字檔案
56
Global.asax檔案的使用
 在IIS的Web伺服器(Cassini Personal Web
Server的每一個應用程式目錄可以擁有一個
Global.asax檔案),Global.asax檔案能夠放在2
個地方,如下所示:
 網站的主目錄:如果將Global.asax檔案放在此目錄
(預設是Web應用程式),不論目錄本身,實際或其
虛擬子目錄都可以存取檔案內建立的Application和
Session變數。
 虛擬應用程式的主目錄:如果已經將虛擬目錄設定成
Web應用程式,虛擬目錄的根目錄也允許擁有
Global.asax檔案。
57