第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server...
-
date post
20-Dec-2015 -
Category
Documents
-
view
233 -
download
6
Transcript of 第 12 章 存取用戶端的資訊. 12-1 ASP.NET 網頁常用的物件 Response Request Server...
第 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>
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>
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 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>
讀取伺服器環境變數與 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 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>
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)
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)
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>
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>
12-5 Cookie
Cookie具有下列幾項優點: 您可以設定 Cookie的生命週期。 存放在用戶端的記憶體或磁碟,不會佔用Web伺服器的磁碟空間。
可以記錄瀏覽者的個人資訊。
相對的, Cookie則有下列幾項缺點: 只能記錄字串、數值等簡單的型別,無法
記錄物件、陣列等複雜的型別。 由於 Cookie存放在用戶端,可能會被瀏
覽者刪除或拒絕寫入。 可能導致個人資訊被竊取。
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
\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>
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。
\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>>
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>