第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server...

18
第 12 第 第第第第第第第第
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    233
  • download

    6

Transcript of 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server...

Page 1: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

第 12章 存取用戶端的資訊

Page 2: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-1   ASP.NET網頁常用的物件 Response Request Server Application Session Context Trace

Page 3: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-2-1 將輸出傳送到用戶端 \Ch12\Write.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Response.Write("<b><i>生日快樂</i></b>")    Response.Write("<br>")    Response.Write("<b><i>生日快樂</i></b>")    Response.Write("<br>")    Response.Write("<hr align=left width=70%>")    Response.Write("<a href=""default.htm"">回首頁</a>")    Response.Write("<br>")    Response.Write("<a href='default.htm'>回首頁</a>")    Response.Write("<br>")    Response.Write(Server.HTMLEncode("<hr align=""left"" width=""70%"">"))

  End Sub</script> 

Page 4: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-2-2 將檔案內容傳送到用戶端

\Ch12\Information.txt<b>大學之道在明明德,在親民,在止於至善。知止而后有定,定而后能靜

,靜而后能安,安而后能慮,慮而后能得,物有本末,事有始終,知所先後,則近道也。</b>

\Ch12\WriteFile.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    Response.Charset = "big5"    Response.WriteFile("Information.txt")  End Sub</script>

Page 5: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-2-3 將資料加入站台活動記錄

\Ch12\AppendToLog.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    Response.AppendToLog("這是自訂的站台活動記錄 ")  End Sub</script>

你必須設定 IIS1. 啟動 “網站”  “啟用記錄”2. 格式選用 “ NCSA 通用檔案記錄格式”3. 檔案的位置在 C:\Windows\System32\LogFiles\W3CVC14. 檔案的名稱由 nc 帶頭緊接日期,副檔名為 log。

Page 6: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

判斷用戶端瀏覽器的能力<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Response.Write("作業系統: " & Request.Browser.Platform & "<br>" & vbCrLf)    Response.Write("瀏覽器: " & Request.Browser.Browser & "<br>" & vbCrLf)    Response.Write("瀏覽器版本: " & Request.Browser.Version & "<br>" & vbCrLf)    Response.Write("是否支援 ActiveXControls: " & Request.Browser.ActiveXControls & 

"<br>" & vbCrLf)    Response.Write("是否支援 JavaApplet: " & Request.Browser.JavaApplets & "<br>" & 

vbCrLf)    Response.Write("是否支援 JavaScript: " & Request.Browser.JavaScript & "<br>" & vbCrLf)    Response.Write("是否支援 VBScript: " & Request.Browser.VBScript & "<br>" & vbCrLf)    Response.Write("是否支援 Cookie: " & Request.Browser.Cookies)  End Sub</script>

Page 7: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

讀取伺服器環境變數與 HTTP標頭

<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Response.Write("作業系統: " & Request.Browser.Platform & "<br>" & vbCrLf)    Response.Write("瀏覽器: " & Request.Browser.Browser & "<br>" & vbCrLf)    Response.Write("瀏覽器版本: " & Request.Browser.Version & "<br>" & vbCrLf)    Response.Write("是否支援 ActiveXControls: " & Request.Browser.ActiveXControls & 

"<br>" & vbCrLf)    Response.Write("是否支援 JavaApplet: " & Request.Browser.JavaApplets & "<br>" & 

vbCrLf)    Response.Write("是否支援 JavaScript: " & Request.Browser.JavaScript & "<br>" & vbCrLf)    Response.Write("是否支援 VBScript: " & Request.Browser.VBScript & "<br>" & vbCrLf)    Response.Write("是否支援 Cookie: " & Request.Browser.Cookies)  End Sub</script>

Page 8: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Response.Write("網頁虛擬路徑: " & Request.ServerVariables("Path_Info") & "<br>")    Response.Write("遠端主機名稱: " & Request.ServerVariables("Remote_Host") & "<br>")    Response.Write("伺服器名稱或 IP: " & Request.ServerVariables("Server_Name") & "<br>")    Response.Write("伺服器連接埠: " & Request.ServerVariables("Server_Port") & "<br>")    Response.Write("伺服器 HTTP 版本: " & Request.ServerVariables("Server_Protocol") & 

"<br>")    Response.Write("伺服器軟體版本: " & Request.ServerVariables("Server_Software") & 

"<br>")    Response.Write("用戶端資訊: " & Request.ServerVariables("Http_User_Agent") & "<br>")    Response.Write("CGI 版本: " & Request.ServerVariables("Gateway_Interface"))  End Sub</script>

Page 9: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-4   Server物件 Server 物件提供了用來處理網頁要求的屬性和方法

Server物件的屬性 MachineName ScriptTimeout=n

Server物件的方法: ClearError() CreateObject(type) Execute(path, writer) GetLastError() HtmlDecode(str, writer) HtmlEncode(str, writer) Transfer(url, preserveForm) 

Page 10: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

MapPath(path) UrlDecode(str, writer) :例如 Server.UrlDecode("http%3a%2f%2fwww.asp.net%2findex.aspx%3fLang%3dbig5") 會傳回 http://www.asp.net/index.aspx? Lang=big5,%3a被解碼為 ":" ,%2f被解碼為 "/" ,%3f被解碼為 "?" ,%3d被解碼為 "=" 。

UrlEncode(str, writer) 例如Server.UrlEncode("http://www.asp.net/index.aspx? Lang=big5") 會傳回 http%3a%2f%2fwww.asp.net%2findex.aspx%3fLang%3dbig5, ":" 被編碼為 %3a, "/" 被編碼為 %2f, "?" 被編碼為 %3f, "=" 被編碼為 %3d。

UrlPathEncode(str) 

Page 11: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-4-1 字串編碼 \Ch12\UrlEncode.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    myLink.NavigateUrl = "線上票選 .aspx?Vote=" & Server.UrlEncode("陳俊榮 ")  End Sub</script><html>  <body>    <form runat="server" method="get">      <asp:HyperLink runat="server" ID="myLink" Text="我要投票給陳俊榮 " />    </form>  </body></html>

Page 12: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-4-2 執行指定的 ASP.NET網頁

\Ch12\Page1.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    Response.Write("<p>呼叫 Execute()方法之前</p>")    Server.Execute("Page2.aspx")    Response.Write("<p>呼叫 Execute()方法之後</p>")  End Sub</script>

\Ch12\Page2.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    Response.Write("<p>這是 Page2.aspx的執行結果</p>")  End Sub</script>

Page 13: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-5   Cookie 

Cookie具有下列幾項優點: 您可以設定 Cookie的生命週期。 存放在用戶端的記憶體或磁碟,不會佔用Web伺服器的磁碟空間。

可以記錄瀏覽者的個人資訊。

相對的, Cookie則有下列幾項缺點: 只能記錄字串、數值等簡單的型別,無法

記錄物件、陣列等複雜的型別。 由於 Cookie存放在用戶端,可能會被瀏

覽者刪除或拒絕寫入。 可能導致個人資訊被竊取。

Page 14: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-5-1 寫入 Cookie 

\Ch12\WriteCookie.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Dim aCookie As HttpCookie = New HttpCookie("UserInfo")    aCookie.Values("UserName") = "John"    aCookie.Values("UserAge") = "20"    aCookie.Values("LastVisited") = DateTime.Now.Date()    aCookie.Expires = DateTime.Now.AddDays(7)    Response.Cookies.Add(aCookie)  End Sub</script>

以 Firefox 來檢視 Cookies1. 出現在 localhost 之下(以網站名稱排序)2. 產生一個名叫 UserInfo 的 Cookie3. 內容有 UserName、 UserAge等資訊

以 IE 為例1. C:\Documents and Setting\<使用者名稱>\Cookies\<使用者名稱>@localhost[1].txt

Page 15: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

\Ch12\WriteCookie2.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    Response.Cookies("UserInfo")("UserName") = "John"    Response.Cookies("UserInfo")("UserAge") = 20    Response.Cookies("UserInfo")("LastVisited") = DateTime.Now.Date()

    Response.Cookies("UserInfo").Expires = DateTime.Now.AddDays(7)

  End Sub</script>

Page 16: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-5-2 讀取 Cookie 

\Ch12\ReadCookie.aspx01:<%@ Page Language="VB" %>02:<script runat="server">03:  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)04:    Dim aCookie As HttpCookie = Request.Cookies("UserInfo")05:    Response.Write("使用者名稱: " & aCookie.Values("UserName") & "<br>")06:    Response.Write("年齡: " & aCookie.Values("UserAge") & "<br>")07:    Response.Write("最後瀏覽日期: " & aCookie.Values("LastVisited"))08:  End Sub09:</script>

為了安全起見, IE 只允許你閱讀同一個網站的 cookies。

Page 17: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

\Ch12\ReadCookie2.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)    Dim I, J As Integer    Dim aCookie As HttpCookie    For I = 0 To Request.Cookies.Count - 1       aCookie = Request.Cookies(I)      Response.Write("Cookie的名稱: " & aCookie.Name & "<br>")      If aCookie.HasKeys Then        For J = 0 To aCookie.Values.Count - 1          Response.Write("子鍵的名稱: " & aCookie.Values.AllKeys(J) & "<br>")          Response.Write("子鍵的值: " & aCookie.Values(J) & "<br>")        Next       Else        Response.Write("沒有子鍵 ")      End If    Next  End Sub</script>>

Page 18: 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server Application Session Context Trace.

12-5-3 刪除 Cookie 

\Ch12\DeleteCookie.aspx<%@ Page Language="VB" %><script runat="server">  Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)

    If (Request.Cookies("UserInfo") IsNot Nothing) Then      Dim aCookie As HttpCookie = New HttpCookie("UserInfo")      aCookie.Expires = DateTime.Now.AddDays(-1)      Response.Cookies.Add(aCookie)    End If  End Sub</script>