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

Slides:



Advertisements
Similar presentations
模块五 动态网页技术 任务五 查询记录 任务一 表单设计制作 任务二 简单动态的 ASP 页面制作任务三 页面与数据库的集成任务四 添加记录 任务六 电商系统融入网站.
Advertisements

《计算机网络技术》 动态网页制作技术 常用HTML控件课程积件 杨 姝.
基于JSP搭建Web应用程序.
第七章 电子商务系统的运营与维护.
第13章 FTP檔案上傳、 自動傳送 報告人 M9153314 李育旻.
《ASP.NET数据库网站设计教程(C#版)》
TQC+ JAVA全國教師研習會 PLWeb 程式設計練習平台 簡介.
Chapter 7 網頁應用程式與狀態管理.
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
《ASP.NET数据库网站设计教程(C#版)》
Hello World 體驗實作第一個JSP程式.
第四章 網頁表單與資料傳遞.
Ch07 表單欄位驗證控制項 網頁程式設計.
VMware Player 安裝說明 2018/11/14.
Ch11 檔案上傳及電子郵件 WEB程式設計.
ASP.NET 網頁製作教本 – 從基本語法學起
PHP與SQL語法存取MySQL SQL
在 Web 应用中,导航是非常重要的。ASP
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
ASP.NET 網頁製作教本 – 從基本語法學起
ASP.NET 網頁製作教本 – 從基本語法學起
Google Data API Spreadsheet
進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004
HiNet 光世代非固定制 用戶端IPv6設定方式說明
ASP.NET 網頁製作教本 – 從基本語法學起
SQL Stored Procedure SQL 預存程序.
第11章 ASP.NET的Web應用程式 11-1 ASP.NET應用程式的基礎 11-2 Global.asax檔的使用
PHP 程式流程控制結構.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
網頁切換移轉 JS vs. ASP.NET.
ASP.NET 網頁製作教本 – 從基本語法學起
第 6 章 Application、Session 物件與Cookie
App Inventor2呼叫PHP存取MySQL
主 讲 教 师:陆有军 Web技术与应用 第四章 内部对象 主 讲 教 师:陆有军
Java 程式設計 講師:FrankLin.
FTP檔案上傳下載 實務與運用.
第3章 ASP.NET程序设计基础 3.
網頁切換移轉 JS vs. ASP.NET.
W3C标准网页制作 主讲教师:张 涛.
PHP 變數、常數與運算子 變數 常數 運算子
表單(Form).
VS.NET 2003 IDE.
第10章 Web應用程式的資料分享 10-1 Web應用程式的基礎 10-2 設定ASP.NET的Web應用程式 10-3 網頁間的資料分享
第4章 ASP.NET的HTTP物件、輸出入與Cookie處理
HTML 103 互動式網頁.
第18章 個人入口網站的建立 18-1入口網站的基礎 18-2 建立網站的搜尋引擎 18-3 網頁組件的個人化功能
Ch09 在網頁之間傳遞資訊 網頁程式設計.
Ch04 VB.NET的流程控制 網頁程式設計.
表單(Form).
表格(HTML – FORM).
打地鼠(陣列版).
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
IIS Internet Information Services
Google協作平台+檔案分享(FileZilla+網路芳鄰)
HTML 103 互動式網頁 助教:黃毓瑩.
Controls.
個人網路空間 資訊教育.
VS.NET 2003 IDE.
如何使用Gene Ontology 網址:
向导控件的样式 当创建了一个向导控件时,系统会自动生成向导控件的 HTML 代码,示例代码如下所示。
第6章 PHP的数据采集.
表格(HTML – FORM)
編輯網頁可用那些應用程式? 記事本 Word FrontPage Dreamweaver.
程式移植.
1. 查詢個人電腦版本 1.進入控制台 2.點選“所有控制台項目” 3.點選“系統”.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
資料結構與C++程式設計進階 期末考 講師:林業峻 CSIE, NTU 7/ 15, 2010.
Chapter 4 Multi-Threads (多執行緒).
Develop and Build Drives by Visual C++ IDE
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
Presentation transcript:

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

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

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

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

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

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

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

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

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

範例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

範例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"

範例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("http://mis2.nkmu.edu.tw/wangdaj") End Sub </script> </head>

範例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>

範例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>

範例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>

範例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>

範例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>

範例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>

範例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>

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

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

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

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

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

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

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

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

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

範例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>

範例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>

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

範例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>

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

Session物件的基礎-圖例

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

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

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

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

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

範例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>

範例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>

範例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>

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

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

Application物件的基礎-圖例

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

Application變數的使用-方法

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

範例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>

範例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>

範例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>

範例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("http://mis2.nkmu.edu.tw/wangdaj") </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>

範例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>

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

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>

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

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