Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ch10 網頁間的資料分享: Application Session 與Cookies的處理

Similar presentations


Presentation on theme: "Ch10 網頁間的資料分享: Application Session 與Cookies的處理"— Presentation transcript:

1 Ch10 網頁間的資料分享: Application Session 與Cookies的處理
WEB程式設計

2 大綱 Web應用程式 網頁間的資料分享 Application物件的使用 Session物件的使用 Global.asax檔案的使用
Cookies的處理 Cookies的應用

3 Web應用程式的基礎-說明 Web應用程式是指網站目錄和其子目錄執行檔案的能力,IIS支援ASP.NET、ASP、ISAPI、CGI、IDC與SSI應用程式,能夠設定應用程式的執行權限,也就是檔案所在目錄的權限,以Web應用程式來說是【指令】和【執行】權限。

4 Web應用程式的基礎-ASP.NET應用程式
ASP.NET技術的Web應用程式就是建立ASP.NET應用程式,屬於一種.NET Framework應用程式。 這是一種完全在伺服端執行的應用程式,ASP.NET應用程式是由一些程式檔案組成,當我們在Web伺服器的虛擬目錄建立ASP.NET程式檔案和設定檔案Global.asax,就是在建立ASP.NET應用程式。

5 Web應用程式的基礎-圖例 每一個應用程式有一個Global.asax檔案,可以建立一個Application物件
每一個進入應用程式的使用者都擁有獨立的Session物件

6 網頁間的資料分享 ASP.NET使用HTTP通訊協定,其特性就是 ASP.NET程式並不是在客戶端的電腦執行,而是 在伺服端執行,客戶端主要的目的只是讀取網頁 內容或提供使用者輸入資料的介面。 在Web伺服器的伺服端,事實上,對於同時連線 網站的使用者幾乎無法獲得任何使用者狀態,因 為網站各網頁間並沒有什麼關連,ASP.NET程式 碼的變數只限在同一個ASP.NET程式存取,而無 法橫越其它的ASP.NET程式。 ??所以,如何將資料傳送給下一個網頁呢??

7 在網頁間分享資料 網站的分享資料可以分為2種,如下所示:
分享給網站所有的使用者:在ASP.NET程式就是所謂的Application變數,例如:目前線上的使用者數。 針對每位使用者的專屬資料:在ASP.NET程式就是Session變數,例如:登入使用者的權限。

8 網頁間資料分享的方法 ASP.NET程式在網頁間傳遞資料的方法有很多種,整理如下所示:
利用Web表單將表單處理的ASP.NET程式指定成其它ASP.NET程式,如此就可以將欄位資料傳遞到其它ASP.NET程式。 利用Request物件配合表單或網址URL參數,將欄位資料和參數傳到其它的ASP.NET程式。 利用Application和Session物件。 利用Cookies直接保留在客戶端電腦,以便ASP.NET程式取得所需的資訊。

9 網頁間資料分享的方法 上頁的分享方法的適用性: Cookies通常是儲存一些客戶端使用者的選擇和狀態
對於Web應用程式,若是程式間的資料分享,主要是使用儲存在伺服端的Application和Session物件

10 範例1:利用表單方式來資料分享 將每一個看起來好像是一頁的網頁以Panel來裝載
以這個範例而言,共有三個畫面要呈現及要求輸入資料,所以,就有三個panel來裝載,另外,有第四個panel是為了要呈現所有之前輸入的資料 這個方法,從頭到尾,都在同一個程式中,所以,變數一直都存在著,並不需要做網頁間的資料傳輸。 <!--程式範例Ex10_01.aspx:使用WEB控制項(panel) --> Page Language="VB" %> <html> <head> <title>Ex10_01:使用WEB控制項+Panel</title> <script language="Vb" runat="server"> Sub Page_Load(s as object, e as eventargs) Panel1.visible="true" Panel2.visible="false" Panel3.visible="false" Panel4.visible="false" End Sub Sub Button1_click(s as object, e as eventargs) If Page.IsValid Then panel1.visible="false" panel2.visible="true" panel3.visible="false" panel4.visible="false" End If Label1.Text = member_id.Text

11 範例1:利用表單方式來資料分享(續) Sub Button2_click( s as object, e as eventargs)
panel1.visible = "true“ panel2.visible = "false" panel3.visible = "false" panel4.visible = "false“ End Sub Sub Button3_click(s as object, e as eventargs) If work1.Checked = true Then Label2.Text = work1.Text End If If work2.Checked = true Then Label2.text = work2.Text If work3.Checked = true Then Label2.text = work3.Text If work4.Checked = true Then Label2.text = work4.Text If work5.Checked = true Then Label2.text = work5.Text If male.Checked = true Then Label3.Text = "先生, 你好!" End If If female.Checked = true Then Label3.Text = "女士, 妳好!" panel1.visible = "false" panel2.visible = "false" panel3.visible = "true" panel4.visible = "false" End Sub Sub Button4_click( s as object, e as eventargs) panel2.visible = "true" panel3.visible = "false"

12 範例1:利用表單方式來資料分享(續) Sub Button5_click(s as object, e as eventargs)
Dim i as integer panel1.visible = "false" panel2.visible = "false" panel3.visible = "false" panel4.visible = "true" For i = 0 to e_news.Items.Count -1 If e_news.Items(i).Selected Then If Label4.Text="" Then Label4.Text += e_news.Items(i).Text Else Label4.Text += ", " & e_news.Items(i).Text End If Next End Sub Sub Button6_click(s as object, e as eventargs) Response.Redirect(" End Sub </script> </head>

13 範例1:利用表單方式來資料分享(續) <body> <form runat="server">
<asp:Panel Id="panel1" Runat="server" backColor="Pink"> <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="請輸入密碼!" <asp:CompareValidator Id="compare_pass" ValueToCompare="123" Type="String" ErrorMessage="你的密碼錯誤,是123!" <asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" /> </asp:Panel>

14 範例1:利用表單方式來資料分享(續) <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="公" <asp:RadioButton id="work3" text="教" <asp:RadioButton id="work4" text="工" <asp:RadioButton id="work5" text="其他" <br> 性 別 : <asp:RadioButton id="male" Text="先生" GroupName="fm" runat="server" /> <asp:RadioButton id="female" Text="女士" <asp:button id="button2" runat="server" Text="上一步" OnClick="Button2_click" /> <asp:button id="button3" runat="server" Text="下一步" OnClick="Button3_click" /> </asp:Panel>

15 範例1:利用表單方式來資料分享(續) <asp:Panel id="panel3" runat="server" backcolor="lightyellow"> <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> <asp:Panel id="panel4" runat="server" backcolor="lightgreen"> <center><h4><asp:Label id="Label1" runat="server" /> <asp:Label id="Label3" runat="server" /> </h4> </center> 你的工作類型是: <asp:Label id="Label2" runat="server" /><br> 你訂閱的電子報類型是: <asp:Label id="Label4" runat="server" /><br> <asp:button id="button6" runat="server" Text="回首頁" OnClick="Button6_click" /> </form> </body></html>

16 範例2:利用Request物件配合表單或網址URL參數
Ex10_02_01.html <!--程式範例Ex10_02_01.html:使用HTML控制項+POST --> <html> <head> <title>Ex10_02:使用HTML控制項+POST</title> </head> <body> <form name="f1" method="POST" action="Ex10_02_02.aspx"> <center><H4>會員登入</h4></center> <hr> 會員帳號 : <Input type="TEXT" name="mid"><br> 密 碼 : <Input type="PASSWORD" name="mpass" ><br> <Input type="submit" name="b1" Value="下一步"><br> </form> </body> </html>

17 範例2:利用Request物件配合表單或網址URL參數
Ex10_02_02.aspx <!--程式範例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>

18 範例2:利用Request物件配合表單或網址URL參數
Ex10_02_03.aspx <!--程式範例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>

19 範例2:利用Request物件配合表單或網址URL參數
Ex10_02_04.aspx <!--程式範例Ex10_02_04.aspx:使用HTML控制項+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>") If e1 <> "" Then Response.Write(e1 & ", ") End If If e2 <> "" Then Response.Write(e2 & ", ") If e3 <> "" Then Response.Write(e3 & ", ") If e4 <> "" Then Response.Write(e4 & ", ") If e5 <> "" Then Response.Write(e5 & ", ") If e6 <> "" Then Response.Write(e6) Response.Write("<br>") %> </body> </html>

20 Cookies的基礎-說明 Cookies的英文意義是小餅乾,源於這些儲存在客 戶端電腦的檔案尺寸都很小,Cookies儲存在瀏覽 程式所在的電腦,所以並不會浪費伺服器的資源, 只需執行ASP.NET程式進入Web應用程式時,檢 查客戶端是否儲存Cookie,在取得Cookie保留的 資訊後,就可以輕鬆建立複雜的Web應用程式。 當Web應用程式需要使用者的瀏覽記錄,例如:使用 者是否曾經瀏覽過網站,或是一些個人資訊,此時 Cookies是一個最佳的解決方案

21 Cookies的基礎-儲存位置 在「C:\Documents and Settings\Joe Chen\Local Settings\Temporary Internet Files」的快取資料夾,可以看到一大堆網站保留在客戶端電腦的Cookie檔案,如下圖所示:

22 新增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就會刪除。

23 取得Cookie的值 如果客戶端電腦擁有Cookie,我們可以使用Request物件的Cookies集合物件取得指定Cookie的值,其程式碼如下所示: name = Request.Cookies("UserName").Value 程式碼取得Cookie名稱UserName的值,將它指定給變數name。

24 刪除Cookie 如果客戶端的Cookie不再需要,我們可以使用程式碼刪除Cookie,刪除方式只需將Expires屬性設定成過期即可,其程式碼如下所示: Response.Cookies("UserName").Expires = _ DateAdd("D", -365, Today) 程式碼將有效期限設定為一年前,因為Cookie已經過期,換句話說,就是刪除Cookie。

25 多鍵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名稱。

26 多鍵Cookie的使用-取出與刪除 多鍵Cookie如同一個陣列,取得Cookie值時不只需要指定名稱,還需要指定鍵名,如下所示:
name = Request.Cookies("User")("UserName") pass = Request.Cookies("User")("Password") 多鍵Cookie的刪除只需使用Cookie名稱設定Expires屬性就可以刪除,如果只刪除Cookie其中的一個鍵名,只需將該鍵名設成空字串,如下所示: Response.Cookies("User")("Password") = ""

27 Cookies的基本應用 Cookies在網站實作上的應用相當多,使用Cookies保留的資料大都屬於幾個方面,如下所示:

28 儲存使用者的瀏覽記錄 如果使用者在瀏覽網站時,一進入網頁就馬上顯示歡迎再次到訪的訊息,使用者可能會驚訝於這個網站怎麼如此Smart,事實上,該網站早已經在您第一次進入網頁時,就已經在電腦留下到訪的記錄,這就是Cookies的功能。 ASP.NET程式檢查客戶端的電腦是否已經留下使用者名稱的Cookie,其程式碼如下所示: name = Request.Cookies("UserName").Value 如果變數name有內容,表示已經建立Cookies,就直接顯示歡迎使用者的訊息,否則顯示Web表單輸入使用者名稱,然後建立Cookie儲存使用者名稱。

29 範例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") 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 If work3.Checked = true Then Response.Cookies("work").Value = work3.Text If work4.Checked = true Then Response.Cookies("work").Value = work4.Text If work5.Checked = true Then Response.Cookies("work").Value = work5.Text If male.Checked = true Then Response.Cookies("s").Value = "先生, 你好!" Response.Cookies("s").Expires = DateAdd("D", 1, Today) If female.Checked = true Then Response.Cookies("s").Value = "女士, 妳好!" 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="公" <asp:RadioButton id="work3" text="教" <asp:RadioButton id="work4" text="工" <asp:RadioButton id="work5" text="其他" <br> 性 別 : <asp:RadioButton id="male" Text="先生" GroupName="fm" runat="server" /> <asp:RadioButton id="female" Text="女士" <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>

30 範例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 Next Response.Cookies("e_news").Value = news Response.Cookies("e_news").Expires = DateAdd("D", 1, Today) Response.Redirect("Ex10_03_04.aspx") </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>

31 範例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(" </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>

32 範例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="請輸入密碼!" <asp:CompareValidator Id="compare_pass" ValueToCompare="123" Type="String" ErrorMessage="你的密碼錯誤,是123!" <asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" /> </asp:Panel> </form> </body> </html>

33 Session物件的基礎-說明 當一位尚未建立Session物件的使用者執行Web應用程式的ASP.NET程式,伺服器就會自動建立一個新的Session物件,並且指定唯一的Session ID編號。 如果同時有多位使用者進入網站,每位使用者都會指定一個專屬的Session ID編號,以便建立不同的Session物件。

34 Session物件的基礎-圖例

35 Session變數的使用-說明 Session變數是附屬在進入Web應用程式使用者的Session期間,每一位使用者都擁有一組專屬的Session變數,雖然每位使用者的Session變數名稱相同,但是內容可能完全不同,而且只有該使用者執行的ASP.NET程式才能夠存取自己專屬的Session變數。

36 Session變數的使用-方法與屬性

37 Session變數的使用-存取 在ASP.NET程式設定Session變數的程式碼,如下所示:
Session("User_Pages")=Session("User_Pages")+1 程式碼將Session變數User_Pages加一,Session變數並不需要考慮資料衝突的問題,因為它是附屬於使用者的Session期間,我們可以使用下列程式碼取得使用者目前的Session ID,如下所示: 使用者的Session ID : <%=Session.SessionID%><br>

38 使用Session變數傳遞資料 Session變數主要的用途是在網頁間分享資料,換句話說。例如:儲存使用者資訊的名稱和密碼,首先是使用者hueyan的Session變數,如下: Session("UserName") = "hueyan" Session("UserPassword") = "1234" 只要使用者沒有超過Session期間或執行Abandon()方法,在期間內執行其它ASP.NET程式都可以存取上述Session變數的值,如下所示: name = Session("UserName") password = Session("UserPassword")

39 Session變數的使用限制 在Session變數使用上的一些限制,如下:
如果瀏覽程式為Internet Explorer 4.0x前的版本,需要開啟Cookies功能。 ASP.NET程式執行轉向指令,只限同一個Web應用程式,不能轉向到其它的Web伺服器。 如果是十分龐大的Web應用程式,擁有多個子目錄,子目錄ASP.NET程式所建立的Session變數是無法在其它子目錄中存取。 Session變數的使用上比較浪費記憶體。

40 範例4:利用Sessiones來傳送網頁間資料
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="請輸入密碼!" <asp:CompareValidator Id="compare_pass" ValueToCompare="123" Type="String" ErrorMessage="你的密碼錯誤,是123!" <asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" /> </asp:Panel> </form> </body> </html>

41 範例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 If work3.Checked = true Then Session("work") = work3.Text If work4.Checked = true Then Session("work") = work4.Text If work5.Checked = true Then Session("work") = work5.Text If male.Checked = true Then Session("s") = "先生, 你好!" If female.Checked = true Then Session("s") = "女士, 妳好!" Response.Redirect("Ex10_04_03.aspx") </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="公" <asp:RadioButton id="work3" text="教" <asp:RadioButton id="work4" text="工" <asp:RadioButton id="work5" text="其他" <br> 性 別 : <asp:RadioButton id="male" Text="先生" GroupName="fm" runat="server" /> <asp:RadioButton id="female" Text="女士" <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>

42 範例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 Next Session("e_news") = news Response.Redirect("Ex10_04_04.aspx") </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>

43 範例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(" </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>

44 Application物件的基礎-說明 Application物件最主要的目的是建立Application變數,這和一般的程式變數不同,它是一個集合物件,Application變數提供進入Web應用程式的每位使用者一個分享資料的管道,因為Application變數的內容允許網站的每位使用者存取其值。

45 Application物件的基礎-圖例

46 Application變數的使用-基本格式
不論網站的Web應用程式同時有多少位使用者進入,對於每一個Application變數,伺服端都只會在記憶體保留一份資料,變數的基本格式如下: Application("Page_Counter")=0 變數名稱和一般ASP.NET程式使用的變數不太一樣,這是一個字串"Page_Counter",加上Application()表示為集合物件,上述程式碼將Application變數Page_Counter設為零。

47 Application變數的使用-方法

48 Application變數的使用-存取 如果2位使用者同時讀取Application變數並沒有關係,如果一位更改,一位是讀取Application變數,在這種情況下衝突就會發生,為了避免這種情況,Application的2個方法可以保障在同一時間內只允許一位使用者存取Application變數,如下所示: Application.Lock() Application("Page_Counter")= _ Application("Page_Counter")+1 Application.Unlock()

49 範例5:利用Application來傳送網頁間資料
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> <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="請輸入密碼!" <asp:CompareValidator Id="compare_pass" ValueToCompare="123" Type="String" ErrorMessage="你的密碼錯誤,是123!" <asp:button id="button1" runat="server" Text="下一步" OnClick="Button1_click" /> </asp:Panel> </form> </body> </html>

50 範例5:利用Application來傳送網頁間資料
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("work") = work2.Text If work3.Checked = true Then Application("work") = work3.Text If work4.Checked = true Then Application("work") = work4.Text If work5.Checked = true Then Application("work") = work5.Text If male.Checked = true Then Application("s") = "先生, 你好!" 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="公" <asp:RadioButton id="work3" text="教" <asp:RadioButton id="work4" text="工" <asp:RadioButton id="work5" text="其他" <br> 性 別 : <asp:RadioButton id="male" Text="先生" GroupName="fm" runat="server" /> <asp:RadioButton id="female" Text="女士" <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>

51 範例5:利用Application來傳送網頁間資料
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 Next Application.Lock() Application("e_news") = news Application.Unlock() Response.Redirect("Ex10_05_04.aspx") </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>

52 範例5:利用Application來傳送網頁間資料
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(" </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>

53 範例6:利用Application計算進入網頁的次數
Page Language="VB" %> <html> <head> <title>範例6:計算進入本網頁次數(Application應用)</title> </head> <body> <% If IsNothing(Application("Page_Counter")) Then Application.Lock() Application("Page_Counter") = 0 Application.Unlock() End If Application("Page_Counter") = Application("Page_Counter") + 1 %> 共有<%=Application("Page_Counter") %>人拜訪過這個網頁<br> </body> </html>

54 Global.asax檔案的使用 Global.asax是一個選擇性檔案,在 ASP.NET的Web應用程式並不一定需要此 檔案,除非Web應用程式需要使用到 Application和Session物件的事件,因為這 些事件處理程序是位在Global.asax檔案。

55 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) Sub Session_Start(sender As Object, e As EventArgs) Sub Session_End(Sender As Object, E As EventArgs) </script>

56 Application與Session物件的事件處理程序

57 Global.asax檔案的使用 在IIS的Web伺服器(Cassini Personal Web Server的每一個應用程式目錄可以擁有一個Global.asax檔案),Global.asax檔案能夠放在2個地方,如下所示: 網站的主目錄:如果將Global.asax檔案放在此目錄(預設是Web應用程式),不論目錄本身,實際或其虛擬子目錄都可以存取檔案內建立的Application和Session變數。 虛擬應用程式的主目錄:如果已經將虛擬目錄設定成Web應用程式,虛擬目錄的根目錄也允許擁有Global.asax檔案。


Download ppt "Ch10 網頁間的資料分享: Application Session 與Cookies的處理"

Similar presentations


Ads by Google