張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室 第十四章 Request 物件 張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室.

Slides:



Advertisements
Similar presentations
計算機程式語言實習課.
Advertisements

LearnMode學習吧 行動學習 網站註冊程序 長榮中學 電腦中心 製.
Microsoft Application Center Test
題目:十六對一多工器 姓名:李國豪 學號:B
張智星 台大資工系 MIR實驗室 第十九章 AJAX 與非同步傳輸 張智星 台大資工系 MIR實驗室.
RIA 程式設計 主講人:彭震榮.
臺北市立大學 資訊科學系(含碩士班) 賴阿福
網頁瀏覽器.
Java簡介.
TCP協定 (傳輸層).
JDK 安裝教學 (for Win7) Soochow University
JAVA 程式設計與資料結構 第六章 輸出與輸入.
客戶端的檔案上傳 HtmlInputFile檔案控制項 上傳單一檔案 同時上傳多個檔案.
Google Data API Spreadsheet
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
家用網路所遇到的問題 與解決方案 演講者:徐子浩 指導老師:梁明章 老師.
類別(class) 類別class與物件object.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
網頁切換移轉 JS vs. ASP.NET.
Echo Server/Client Speaker:Fang.
2017 Operating Systems 作業系統實習 助教:陳主恩、林欣穎 實驗室:720A.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
App Inventor2呼叫PHP存取MySQL
13.1 用框架劃分工作區,方便演示資訊 13.2 使用連結及鎖定點連接資訊 13.3 使用列表及表單演示資訊
檔案與磁碟的基本介紹.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
系統設定 IE8相容性檢視
Java 程式設計 講師:FrankLin.
FTP檔案上傳下載 實務與運用.
私立南山高中 信息組 電腦研習 電腦資料的備份 中華民國 99年4月20日 星期二.
網頁切換移轉 JS vs. ASP.NET.
DHCP for W2K.
張智星 台大資工系 MIR實驗室 第二十章 檔案與目錄 張智星 台大資工系 MIR實驗室.
張智星 台大資工系 多媒體檢索實驗室 第十二章 ASP基本介紹 張智星 台大資工系 多媒體檢索實驗室.
網路安全技術期末報告 Proxy Server
表單(Form).
Topic Introduction—RMI
VS.NET 2003 IDE.
第4章 ASP.NET的HTTP物件、輸出入與Cookie處理
Ch20. 計算器 (Mac 版本).
本院使用建教合作之輔仁大學 圖書館資料庫 設定方式說明
表單(Form).
網頁資料知多少? 事 實 ? 謠言?.
表格(HTML – FORM).
CH1 我的第一個App與變數宣告.
Install OpenCV C++ with Visual Studio 2017 on Windows PC
期末考.
VS.NET 2003 IDE.
如何使用Gene Ontology 網址:
引用檔案.
Visible Body- Human Anatomy Atlas 2017
DRC with Calibre 課程名稱:VLSI 報告人:黃家洋 日期: 改版(蔡秉均) 1.
表格(HTML – FORM)
MiRanda Java Interface v1.0的使用方法
編輯網頁可用那些應用程式? 記事本 Word FrontPage Dreamweaver.
Dreamweaver 進階網頁製作 B 許天彰.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
2018 Operating Systems 作業系統實習 助教:林欣穎 實驗室:720A.
Brief Guide of FrontPage
Parasitics Extraction (PEX) 與 postsimulation(posim)
MultiThread Introduction
Supplier Profile Database
張智星 台大資工系 多媒體檢索實驗室 第十三章 函數與程式碼的重複使用 張智星 台大資工系 多媒體檢索實驗室.
多站台網路預約系統之 AJAX即時資料更新機制
SQLite資料庫 靜宜大學資管系 楊子青.
Visible Body Human Anatomy Atlas
張智星 台大資工系 MIR實驗室 第23章 程式碼的重複使用 張智星 台大資工系 MIR實驗室.
Develop and Build Drives by Visual C++ IDE
JUDGE GIRL 使用介紹 & 常見問題 TAs :
InputStreamReader Console Scanner
Presentation transcript:

張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室 第十四章 Request 物件 張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室

本章大綱 大綱 主題 本章介紹 ASP 的內建物件 Request,可以用來取得用戶對伺服器進行要求(Request)時,所傳送的各種資料。 14-2:讀取伺服器環境變數 14-3:傳送表單資料 14-4:傳送小餅乾

14-1:Request 物件簡介 本小節介紹Request的物件及其基本功用。

Request 物件的基本介紹 ASP 的內建物件之一。 取得用戶對伺服器進行要求(Request)時,對伺服器所送出的資訊。 例如:用戶端的表單資訊、小餅乾資訊、認證資訊及伺服器的環境變數等。 經由 HTTP 的表頭(Headers)傳到伺服器端,經由伺服器解析後,存放於 Request 物件。

Request 物件的集合 下列為五個集合(Collections): Request.ClientCertificate:用戶端的認證資訊 Request.Cookies:用戶端硬碟儲存的Cookie資訊 Request.Form:以 post 為傳送方法的表單資訊 Request.QueryString:以 get 為傳送方法的表單資訊 Request.ServerVariables:伺服器環境變數的值

14-2:讀取伺服器環境變數 本小節介紹如何取得環境變數以得知伺服器和用戶端的各種資訊。

得知用戶端及伺服器端的 IP 方法: HTTP request 來源 IP: Request.ServerVariables("REMOTE_ADDR") HTTP request 伺服器 IP: Request.ServerVariables("LOCAL_ADDR") HTTP request 代理伺服器 IP: Request.ServerVariables("HTTP_VIA") HTTP request 原始來源 IP: Request.ServerVariables("HTTP_X_FORWARDED_FOR")

範例14-1 主題:使用 Request.ServerVariables 來抓取 IP Webpage: remote host, local host 程式碼重點 說明 若經由代理伺服器(Proxy Server)取得網頁, Request.ServerVariables("REMOTE_ADDR") 就變成代理伺服器的 IP 。 Request.ServerVariables(“HTTP_VIA”) :顯示所用的代理伺服器。 Request.ServerVariables(“HTTP_X_FORWARDED_FOR”):取得真正客戶端的 IP。 若沒設定代理伺服器,以上兩個皆為空字串。 用戶端IP 伺服器IP <%=Request.ServerVariables("REMOTE_ADDR")%> <%=Request.ServerVariables("LOCAL_ADDR")%> <%=Request.ServerVariables("HTTP_VIA")%> <%=Request.ServerVariables("HTTP_X_FORWARDED_FOR")%>

範例14-2 主題:限制能夠瀏覽此網頁的 IP Webpage: remote host, local host 程式碼重點 說明 使用ASP時,某字串存入另一個字串中,通常會加入一個空字串,以免因某字串非字串而產生錯誤。(ip=Request.ServerVariables("REMOTE_ADDR")+"") domain="140.112."; ip=Request.ServerVariables("REMOTE_ADDR")+""; if (ip.indexOf(domain)!=0){ Response.write("This page is not allowed!"); Response.end; // 停止網頁傳送! }

與伺服器相關的資訊 列出如下: 伺服器網域名稱:Request.ServerVariables("SERVER_NAME") 伺服器埠號: Request.ServerVariables("SERVER_PORT") 伺服器協定:Request.ServerVariables("SERVER_PROTOCOL") 網頁伺服器軟體名稱:Request.ServerVariables("SERVER_SOFTWARE") 伺服器加密:Request.ServerVariables("SERVER_PORT_SECURE")

範例14-3 主題:列出與伺服器相關的資訊 Webpage: remote host, local host 程式碼重點 說明 使用ASP的Request.ServerVariables得知伺服器相關資訊。 <%=Request.ServerVariables("SERVER_NAME")%> <%=Request.ServerVariables("SERVER_PORT")%> <%=Request.ServerVariables("SERVER_PROTOCOL")%> <%=Request.ServerVariables("SERVER_SOFTWARE")%> <%=Request.ServerVariables("SERVER_PORT_SECURE")%>

與網頁路徑相關的資訊 列出如下: 伺服器根目錄的實體硬碟路徑:Request.ServerVariables("APPL_PHYSICAL_PATH") 網頁在實體硬碟的路徑:Request.ServerVariables("PATH_TRANSLATED") 網頁相對應於伺服器根目錄的路徑:Request.ServerVariables("PATH_INFO") 網頁相對應於伺服器根目錄的路徑:Request.ServerVariables("SCRIPT_NAME") 網頁相對應於伺服器根目錄的路徑:Request.ServerVariables("URL")

範例14-4 主題:列出與網頁路徑相關的資訊 Webpage: remote host, local host 程式碼重點 說明 使用ASP的Request.ServerVariables得知網頁路徑的相關資訊。 Request.ServerVariables("PATH_INFO")、Request.ServerVariables("SCRIPT_NAME") 和 Request.ServerVariables("URL") 都會回傳一樣的結果。 <%=Request.ServerVariables("APPL_PHYSICAL_PATH")%> <%=Request.ServerVariables("PATH_TRANSLATED")%> <%=Request.ServerVariables("PATH_INFO")%> <%=Request.ServerVariables("SCRIPT_NAME")%> <%=Request.ServerVariables("URL")%></font>

得知其他相關資訊 列出如下: 連結至目前網頁的前一個網頁:Request.ServerVariables("HTTP_REFERER") 用戶端登錄至網頁的帳號:Request.ServerVariables("LOGON_USER")

範例14-5 主題:抓取「連結至目前網頁的前一個網頁」 Webpage: remote host, local host 程式碼重點 說明 用 Request.ServerVariables("HTTP_REFERER")可得知: 使用者是從哪個友情贊助或廣告網頁連結而來。 知道哪個網頁偷連結到你的網頁。 <%=Request.ServerVariables("HTTP_REFERER")%>

範例14-6 (1/2) 主題:列出 Request.ServerVariables所有相關變數(JScript) Webpage: remote host, local host 程式碼重點 說明 利用引入的listdict.inc檔,將所有Request.ServerVariables都列出。 可以使用 VBScript 來達到相同功能,請見範例程式碼「example/request/serverVariables_vbs.asp」。 <!--#include file="../listdict.inc"--> <% listdict(Request.ServerVariables, "Request.ServerVariables");%>

範例14-6 (2/2) listdict.inc(印出任何Dictionary變數) listdict.inc 包含兩個函數,分別用於對付 JScript 和 VBScript,可列印出任何 Dictionary 變數。 JScript 的 listdict() 函數中,用到 Enumerator 的物件,此物件是類似於 VBScript 的 Dictionary 變數,可用字串來索引另一個字串。

Request.ServerVariables變數的意義 可以直接查看下列網頁: http://www.w3schools.com/asp/coll_servervariables.asp

14-3:傳送表單資料 本小節介紹Request.Form 、 Request.QueryString以及表單資料的傳送。

Request.Form & Request.QueryString 用途 存放用戶端在表單填入的資訊。 讀出輸入值的作法 表單的傳輸方式是 post: 表單的傳輸方式是 get: 無論是 post 或 get,只要欄位名稱不重複: 輸入資料 = Request.Form("欄位名稱") 輸入資料 = Request.QueryString("欄位名稱") 輸入資料 = Request("欄位名稱")

無論post或get都可用Request 說明: 未給定 Collection 時,會嘗試先讀取 Request.QueryString("欄位名稱"),若成功,則停止;若失敗,則會再嘗試讀取 Request.Form("欄位名稱")。

範例14-7 主題:傳送表單資料的範例 Webpage: remote host, local host 說明 如果經由 get 送出: 網址列會列出表單相關的選項 。 原先網址附加的選項(xxx=yyy&aaa=bbb)會消失。 如果經由 post 送出: 網址列不會列出表單相關的選項 。 原先網址附加選項(xxx=yyy&aaa=bbb)不會消失 。 可知post 和 get 可用此方式來並行。 同時用get和post ,最好不要用Request的簡寫方式。

欄位名稱重複時的索引 方法一: 方法二: 說明 name:欄位名稱 index:欄位索引值,從 1 至 Request.Form(name).Count 這裡的索引值是從 1 開始,而不是 0。 Request.QueryString(name)(index) Request.Form(name)(index)

範例14-8 主題:解析表單資料的重複欄位 Webpage: remote host, local host 說明 有重複欄位,但未用 index 指定所要讀取的值時,則 ASP 會讀到多個值所形成的字串,其中每個值都以逗點分開。

14-4:傳送小餅乾 本節主要討論如何以 ASP對小餅乾進行各種處理。

Cookies基本概念的複習 Netscape 公司所發展出來的概念。 目的是要克服 Http Protocals 的 Stateless 的特性。 在客戶端存取一些資訊,使得在 Http Requests 間,能保留一些共通的資訊。 可使用客戶端的 JavaScript 來讀寫小餅乾。

ASP中的Cookies 分兩部分: Request.Cookies:讀取小餅乾的內容。 負責讀取User Agent傳送到伺服器之小餅乾內容。 我們只能只能讀取此變數,而不應該修改其內容。 Response.Cookies:設定小餅乾的內容。 可從伺服器設定小餅乾。

如何讀取小餅乾的內容? 使用 Request.Cookies(Name) 讀取當用戶對伺服器進行要求時,所傳送的相關小餅乾資訊。 Request.Cookies是一個 Dictionary 變數,可以對其內容進行列表。

範例14-9 主題:以 JScript 印出 Request.Cookies 的內容 Webpage: remote host, local host 程式碼重點 說明 使用 Response.Cookies(“111”) = “aaa” 及 Response.Cookies(“222”) = “bbb” 設定兩個小餅乾。 用 listdict() 函數印出存放於 Request.Cookies 的所有小餅乾的值。 Response.Cookies("111") = today.toLocaleString(); Response.Cookies("222") = "bbb"; listdict(Request.Cookies, "Request.Cookies");

範例14-10 (1/2) 主題:小餅乾設定和列表的順序(伺服與客戶端的執行順序) Webpage: remote host, local host 程式碼重點 說明 驗證順序: 先:使用Request.Cookies列出與本頁相關的小餅乾。 後:使用用戶端的JavaScript設定小餅乾,名稱是 lastLoadTime,記錄網頁載入時間。 <!--先在伺服器做的事:列出本頁的小餅乾--> <% listdict(Request.Cookies, "Request.Cookies"); %> // 後在用戶端做的事:設定小餅乾 <script> setCookie("lastLoadTime", todayString);</script>

範例14-10 (2/2) 觀察事項: 用戶第一次要求此網頁時,Request.Cookies 並沒有 lastLoadTime,此小餅乾在網頁被載入後才存在。 第二次再要求此網頁時,lastLoadTime 已經存在於 Request.Cookies,但都是儲存上一次網頁載入的時間,因 Request.Cookies 只傳目前網頁相關的小餅乾。 結論: ASP的網頁,都是先在伺服器端執行 server-side scripts,才到用戶端執行 client-side scripts。 順序不因 server-side scripts 和 client-side scripts在網頁中的位置而有改變。

Cookie 設定流程說明 伺服器 用戶端 Request: 經由表頭資訊 傳送相關的Cookie 到伺服器 JavaScript: 使用戶端的程式碼 來處理Cookie 伺服器 用戶端 Response: 經由表頭資訊 讓瀏覽器設定 相關的Cookie

Cookie 對網頁的作用 無論是 Request 或是 Response,Cookie 都會被帶在表頭資訊中傳送。 在 Request 時,瀏覽器會網頁以前留下來的 Cookie 以表頭資訊一起傳到伺服器。 在 Response 時,伺服器將網頁必須設定的 Cookie 以表頭資訊送到伺服器。我們可以使用 PHP 或 ASP 來控制由伺服器端指定寫入的 Cookie 當網頁送到用戶端時,我們可以使用 JavaScript 來指定 Cookie 的讀寫。