690 likes | 878 Views
Ch09 網頁間的資料分享. 網頁程式設計. 大綱. Web 應用程式 網頁間的資料分享 Application 物件的使用 Session 物件的使用 Global.asax 檔案的使用 Cookies 的處理 Cookies 的應用. Web 應用程式的基礎-說明. Web 應用程式是指網站目錄和其子目錄執行檔案的能力, IIS 支援 ASP.NET、ASP、ISAPI、CGI、IDC 與 SSI 應用程式,能夠設定應用程式的執行權限,也就是檔案所在目錄的權限,以 Web 應用程式來說是【指令】和【執行】權限。.
E N D
Ch09 網頁間的資料分享 網頁程式設計
大綱 • 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物件
將每一個看起來好像是一頁的網頁以Panel來裝載將每一個看起來好像是一頁的網頁以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 End Sub 範例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 End If If work3.Checked = true Then Label2.text = work3.Text End If If work4.Checked = true Then Label2.text = work4.Text End If If work5.Checked = true Then Label2.text = work5.Text End If If male.Checked = true Then Label3.Text = "先生, 你好!" End If If female.Checked = true Then Label3.Text = "女士, 妳好!" End If panel1.visible = "false" panel2.visible = "false" panel3.visible = "true" panel4.visible = "false" End Sub Sub Button4_click( s as object, e as eventargs) panel1.visible = "false" panel2.visible = "true" panel3.visible = "false" panel4.visible = "false" End Sub 範例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 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:利用表單方式來資料分享(續)
範例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="請輸入密碼!" • 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>
範例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="公" • 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>
範例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> • <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>
Form與QueryString集合物件-ASP 3.0版的表單處理 • ASP 3.0版的表單處理使用Form與QueryString集合物件取得使用者輸入的資料,如下所示: • 傳統HTML表單網頁:使用表單欄位以HTTP通訊協定的檔頭傳遞表單欄位資料,可以使用POST或GET方法,如下所示: <form name="name" method="POST | GET" action="URL"> ……. </form> • URL參數:從瀏覽程式輸入的網址傳遞參數,其總長度只有1024個字元。
Form與QueryString集合物件-Form集合物件 • 如果網頁表單使用POST方法傳遞資料,其作法是將傳遞的資料在編碼後,透過HTTP通訊協定的檔頭傳送到Web伺服器,在伺服端使用Form集合物件取出資料,其語法如下所示: Request("FieldName") Request.Form("FieldName")
Form與QueryString集合物件-QueryString集合物件 • 如果網頁表單使用GET方法傳遞資料,其作法是將傳遞的資料編碼後,透過URL網址後的字串傳送到Web伺服器,參數是位在問號之後,如果參數不只一個,請使用「&」符號分隔,如下所示: http://localhost/Ch10-1-1.aspx?fname1=value1&fname2=value2 • 伺服端使用QueryString集合物件取出資料,如下所示: Request("FieldName") Request.QueryString(" FieldName")
表單如何傳遞資料-說明 • 在ASP.NET以傳統HTML表單處理方式是使用Form集合物件取得表單欄位的內容,如下所示: user = Request.Form("user") pass = Request.Form("pass") • 程式碼取得user和pass欄位的值,在括號內的名稱就是表單欄位名稱。
範例2:表單傳遞資料POST(Ex09_02.html) • <form name="order" method="POST" action="Ex09_02.aspx"> • <b>基本資料</b><br> • 姓名: <input type="TEXT" name="user" size=20> • 密碼: <input type="PASSWORD" name="pass" size=20><br> • 地址: <br><textarea name="address" rows=5 cols=35> • </textarea><hr> • <input type="CHECKBOX" name="lang1" checked>VBScript • <input type="CHECKBOX" name="lang2">JavaScript | • <input type="RADIO" name="lang" value="1">ASP.NET • <input type="RADIO" name="lang" checked value="2">ASP<br> • <select name="web"> • <option value="1" selected>PHP</option> • <option value="2">JSP</option> • <option value="3">Java</option> • </select> • <input type="SUBMIT" name"btn" value="送出"> • <input type="RESET" name"btn1" value="重設"> • </form>
Dim user, pass, address, lang As String ' 取得文字方塊,密碼欄位的值 user = Request.Form("user") pass = Request.Form("pass") address = Request.Form("address") Response.Write("姓名: " & user & "<br>") Response.Write("密碼: " & pass & "<br>") Response.Write("地址: " & address & "<br>") ' 取得核取方塊的值 If Request.Form("lang1") = "on" Then Response.Write("勾選VBScript<br>") End If If Request.Form("lang2") = "on" Then Response.Write("勾選JavaScript<br>") End If ' 取得選擇鈕的值 lang = Request.Form("lang") Select Case lang Case "1" Response.Write("選擇ASP.NET<br>") Case "2" Response.Write("選擇ASP<br>") End Select ' 取得下拉式清單方塊的值 lang = Request.Form("web") Select Case lang Case "1" Response.Write("選擇PHP<br>") Case "2" Response.Write("選擇JSP<br>") Case "3" Response.Write("選擇Java<br>") End Select 範例2:表單傳遞資料(Ex09_02.aspx)
URL參數傳遞資料 • URL超連結傳遞的參數或表單GET方法傳遞的內容,都是使用QueryString集合物件取得參數或欄位值,如下所示: name = Request.QueryString("Username") pass = Request.QueryString("Password") • 程式碼左邊是儲存傳遞資料的變數,在右邊括號內的名稱是參數或欄位名稱,這是一個字串。
範例3:表單傳遞資料GET(Ex09_02.html) • <form name="order" method="GET" action="Ex09_03.aspx"> • <b>基本資料</b><br> • 姓名: <input type="TEXT" name="user" size=20> • 密碼: <input type="PASSWORD" name="pass" size=20><br> • 地址: <br><textarea name="address" rows=5 cols=35> • </textarea><hr> • <input type="CHECKBOX" name="lang1" checked>VBScript • <input type="CHECKBOX" name="lang2">JavaScript | • <input type="RADIO" name="lang" value="1">ASP.NET • <input type="RADIO" name="lang" checked value="2">ASP<br> • <select name="web"> • <option value="1" selected>PHP</option> • <option value="2">JSP</option> • <option value="3">Java</option> • </select> • <input type="SUBMIT" name"btn" value="送出"> • <input type="RESET" name"btn1" value="重設"> • </form>
Dim user, pass, address, lang As String ' 取得文字方塊,密碼欄位的值 user = Request.QueryString("user") pass = Request.QueryString("pass") address = Request.QueryString("address") Response.Write("姓名: " & user & "<br>") Response.Write("密碼: " & pass & "<br>") Response.Write("地址: " & address & "<br>") ' 取得核取方塊的值 If Request.QueryString("lang1") = "on" Then Response.Write("勾選VBScript<br>") End If If Request.QueryString("lang2") = "on" Then Response.Write("勾選JavaScript<br>") End If ' 取得選擇鈕的值 lang = Request.QueryString("lang") Select Case lang Case "1" Response.Write("選擇ASP.NET<br>") Case "2" Response.Write("選擇ASP<br>") End Select ' 取得下拉式清單方塊的值 lang = Request.QueryString("web") Select Case lang Case "1" Response.Write("選擇PHP<br>") Case "2" Response.Write("選擇JSP<br>") Case "3" Response.Write("選擇Java<br>") End Select 範例3:表單傳遞資料GET(Ex09_02.aspx)
練習1 請建立擁有三個步驟的表單網頁,各網頁是使用隱藏欄位傳遞欄位資料,最後顯示各步驟輸入或選擇的欄位資料,如下所示: 第一步:輸入使用者名稱和密碼 第二步:選擇個人職業,生日等資料 第三步:選擇個人興趣
範例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參數 • 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> • 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>")
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保留的資料大都屬於幾個方面,如下所示: • 個人資訊:使用Cookies保留個人的資訊,例如:姓名、地址、時區、帳號和造訪網站的次數。 • 個人化的內容:Cookies可以定製個人化的網站外觀和個人偏好的網站內容,或者只提供使用者有興趣的資訊。 • 網站購物車:線上購物車需要保留使用者選擇的商品,Cookies就可以用來記錄這些選購的商品。
儲存使用者的瀏覽記錄 • 如果使用者在瀏覽網站時,一進入網頁就馬上顯示歡迎再次到訪的訊息,使用者可能會驚訝於這個網站怎麼如此Smart,事實上,該網站早已經在您第一次進入網頁時,就已經在電腦留下到訪的記錄,這就是Cookies的功能。 • ASP.NET程式檢查客戶端的電腦是否已經留下使用者名稱的Cookie,其程式碼如下所示: name = Request.Cookies("UserName").Value • 如果變數name有內容,表示已經建立Cookies,就直接顯示歡迎使用者的訊息,否則顯示Web表單輸入使用者名稱,然後建立Cookie儲存使用者名稱。
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> 範例3:利用Cookies來傳送網頁間資料
範例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>
範例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>
範例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>
Session物件的基礎-說明 • 當一位尚未建立Session物件的使用者執行Web應用程式的ASP.NET程式,伺服器就會自動建立一個新的Session物件,並且指定唯一的Session ID編號。 • 如果同時有多位使用者進入網站,每位使用者都會指定一個專屬的Session ID編號,以便建立不同的Session物件。
Session變數的使用-說明 • Session變數是附屬在進入Web應用程式使用者的Session期間,每一位使用者都擁有一組專屬的Session變數,雖然每位使用者的Session變數名稱相同,但是內容可能完全不同,而且只有該使用者執行的ASP.NET程式才能夠存取自己專屬的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")