服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn)_第1頁
服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn)_第2頁
服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn)_第3頁
服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn)_第4頁
服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、工程碩士學(xué)位論文 engineering master dissertation 論文題目 服務(wù)器端狀態(tài)保持機制的軟件系統(tǒng)設(shè)計與實現(xiàn) 針對遂寧藝龍旅行網(wǎng)的改進 工程領(lǐng)域 軟 件 工 程 指導(dǎo)教師 作者姓名 學(xué) 號 摘 要 隨著 web 時代的到來,在無狀態(tài)的 http 世界中保持服務(wù)器端的狀態(tài)成為 web 開發(fā)者的一個大問題。web 服務(wù)器狀態(tài)保持領(lǐng)域最近出現(xiàn)了幾種存儲和檢索 數(shù)據(jù)的不同技術(shù)。本文先介紹了服務(wù)器狀態(tài)保持的現(xiàn)狀,并介紹了 cgi 的基本概 念及提出了基于 cgi 實現(xiàn)的服務(wù)器狀態(tài)保持的目標。后來又介紹了常見的 web 服務(wù)器平臺的架構(gòu),并著重分析了 asp.net 怎樣維護或傳遞

2、服務(wù)器端狀態(tài)。最后 介紹了 lapc/f 架構(gòu)并針對該架構(gòu),采用 cgi 腳本運用 session 機制對服務(wù)器狀 態(tài)保持進行了系統(tǒng)實現(xiàn)。 藝龍旅行網(wǎng) (nasdaq: long)是中國領(lǐng)先的在線旅行服務(wù)提供商之一,為消 費者提供酒店、機票和度假等全方位的旅行產(chǎn)品預(yù)訂服務(wù),遂寧藝龍旅行網(wǎng)是藝 龍旅行網(wǎng)的重要分站之一。由于遂寧市旅游資源豐富,促使了遂寧旅游業(yè)高速發(fā) 展,因此服務(wù)于旅游業(yè)的相關(guān)行業(yè)也飛速的發(fā)展著。遂寧藝龍旅行網(wǎng)是遂寧市最 大的旅游相關(guān)資源定購的服務(wù)平臺,為到遂寧旅游的廣大人士提供機票預(yù)定、酒 店預(yù)定等相關(guān)業(yè)務(wù)。因此遂寧藝龍旅行網(wǎng)的同時在線訪問量較大,由此就造成了 服務(wù)器經(jīng)常發(fā)生異常

3、而導(dǎo)致服務(wù)器狀態(tài)丟失,從而導(dǎo)致遂寧藝龍在用戶心里的滿 意度一再下降。 本課題所研究的方向是借助于 visual c+開發(fā)平臺,運用 cgi 腳本技術(shù),針 對 session 這一種服務(wù)器狀態(tài)保持機制特點,設(shè)計了一種比現(xiàn)有的服務(wù)器狀態(tài)保 持機制更優(yōu)的一種 session 狀態(tài)保持機制。該機制的成功設(shè)計,解決了遂寧市藝 龍旅行網(wǎng)經(jīng)常由于訪問量過大而導(dǎo)致的服務(wù)器狀態(tài)丟失的問題,為遂寧藝龍旅行 網(wǎng)提高客戶滿意度方面做出了巨大的貢獻。 關(guān)鍵詞關(guān)鍵詞: 服務(wù)器狀態(tài),cgi, 會話狀態(tài),c 語言,藝龍 abstract with the web era, in the world of stateless

4、http to maintain the status of a server- side web developers a big problem. web server status remain several areas of recent store and retrieve data of different technologies. this article first describes the state of the server to maintain the status quo, and introduces the basic concepts of cgi an

5、d cgi- based implementation is proposed to maintain the target server status. later introduced a common framework for web server platform, and analyzed how the asp.net server-side state maintenance or delivery. finally, the lapc / f structure and for the framework, the use of cgi scripts on the serv

6、er status using session mechanism to maintain a systematic implementation. elong (nasdaq: long) is a leading online travel service providers to provide consumers with hotels, air tickets and a full range of travel products and vacation booking service, suining, elong is elongs one of the important s

7、ub-station. as rich in tourism resources in suining, suining prompted the rapid development of tourism, so tourism-related service industries in the rapid development of the. elong suining, suining city is the largest tourism resources ordered service platform, to provide the majority of suining tra

8、vel ticket booking, hotel reservations and other related businesses. therefore suining elong large amount of online access while, which has caused the servers are often caused by abnormal loss of server status, resulting in suining elong satisfaction of the user heart dropped again. the subject of t

9、he research direction is by means of visual c + + development platform, the use of cgi scripting technology for the state to maintain session mechanism that features a server, designed a state to maintain than the existing server as a better mechanism to maintain state session mechanism. successful

10、design of the mechanism to solve the suining city elong often as a result of excessive access to the missing server status issues for suining elong increased customer satisfaction has made a great contribution. keywords: server status, cgi, session state, c language, elong 目 錄 第一章第一章 緒論緒論 .1 1 1.1 服

11、務(wù)器狀態(tài)保持機制的選題依據(jù).1 1.2 國內(nèi)外研究現(xiàn)狀.3 1.3 課題研究內(nèi)容.4 1.3.1 研究內(nèi)容 .4 1.3.2 研究目標 .4 第二章第二章 系統(tǒng)的理論基礎(chǔ)系統(tǒng)的理論基礎(chǔ) .5 5 2.1 c 語言簡介 .5 2.1.1 c 語言的定義.5 2.1.2 c 語言的發(fā)展歷史.5 2.1.3 c 語言的優(yōu)點.6 2.2 vc+ 介紹.6 2.2.1 vc+6.0 簡介.6 2.2.2 mfc 簡介.7 2.3 cgi 簡介 .8 2.3.1 cgi 的提出.8 2.3.2 cgi 的工作原理.9 2.3.3 cgi 與其他 web 技術(shù)的關(guān)系.10 2.4 七種常見 web 服務(wù)器簡

12、介.10 2.4.1 microsoft iis .11 2.4.2 ibm websphere .12 2.4.3 bea weblogic .13 2.4.4 iplanet application server .14 2.4.5 oracle ias .14 2.4.6 apache .15 2.4.7 tomcat .16 2.5 session 技術(shù)簡介 .17 2.5.1 session 技術(shù)介紹.17 2.5.2 session 的功能缺陷.18 第三章第三章 服務(wù)器狀態(tài)保持機制分析服務(wù)器狀態(tài)保持機制分析 .1919 3.1 asp.net 服務(wù)器狀態(tài)保持機制 .19 3.1.

13、1 asp.net 應(yīng)用程序狀態(tài).19 3.1.2 asp.net 會話狀態(tài).20 3.1.3 配置文件屬性 .22 3.1.4 數(shù)據(jù)庫支持 .23 3.2 weblogic中服務(wù)器狀態(tài)保持方法 .23 3.3 lapc/f 架構(gòu)分析.24 第四章第四章 服務(wù)器狀態(tài)保持機制的設(shè)計服務(wù)器狀態(tài)保持機制的設(shè)計 .2626 4.1 系統(tǒng)架構(gòu)設(shè)計.26 4.2 uri 編碼方式的設(shè)計 .26 4.3 環(huán)境變量處理.27 4.4 cookie 機制設(shè)計 .28 4.4.1 cookie 的結(jié)構(gòu).28 4.4.2 cookie 的限制.29 4.5 session 機制設(shè)計 .30 4.6 系統(tǒng)詳細設(shè)計.3

14、1 4.6.1 connector 組件設(shè)計.31 4.6.2 container 組件設(shè)計.33 4.6.3 host 設(shè)計.36 4.7 系統(tǒng)組件間接口設(shè)計.37 4.7.1 service 接口設(shè)計.37 4.7.2 standardservice 接口設(shè)計.38 第五章第五章 服務(wù)器狀態(tài)保持機制的實現(xiàn)服務(wù)器狀態(tài)保持機制的實現(xiàn) .4040 5.1 cgi 配置文件的實現(xiàn) .40 5.2 服務(wù)器狀態(tài)監(jiān)控設(shè)置窗口的實現(xiàn).41 5.2.1 服務(wù)器監(jiān)控設(shè)置界面的實現(xiàn) .41 5.2.2 服務(wù)器監(jiān)控設(shè)置界面的代碼實現(xiàn) .42 5.3 服務(wù)器狀態(tài)保持功能的實現(xiàn).43 5.3.1 服務(wù)器狀態(tài)保持實現(xiàn)步

15、驟 .43 5.3.2 代碼實現(xiàn) .44 5.4 服務(wù)器狀態(tài)加載功能的實現(xiàn).53 5.4.1 服務(wù)器狀態(tài)加載功能實現(xiàn)方法 .53 5.4.2 實現(xiàn)代碼 .54 5.5 系統(tǒng)監(jiān)控日志功能的實現(xiàn).55 5.5.1 系統(tǒng)監(jiān)控日志功能的實現(xiàn)方法 .55 5.5.2 系統(tǒng)監(jiān)控日志實現(xiàn)代碼 .56 第六章第六章 總結(jié)與展望總結(jié)與展望 .5858 參考文獻參考文獻 .5959 致致 謝謝 .6161 第一章 緒論 1.1 服務(wù)器狀態(tài)保持機制的選題依據(jù) web 應(yīng)用程序是無狀態(tài)的。 每次從服務(wù)器請求頁時,都會創(chuàng)建網(wǎng)頁類的一 個新實例。 這通常意味著在每次往返過程中會丟失該頁及其控件中的所有信息。 這意味著它們

16、不自動指示序列中的請求是否全部來自相同的客戶端,或者單個瀏 覽器實例是否一直在查看頁或站點。 此外,到服務(wù)器的每一往返過程都將銷毀 并重新創(chuàng)建頁;因此,如果超出了單個頁的生命周期,頁面信息將不存在。頁面 運行時,此頁將經(jīng)歷一個生命周期,在生命周期中將執(zhí)行一系列處理步驟。 這 些步驟包括初始化、實例化控件、還原和維護狀態(tài)、運行事件處理程序代碼以及 進行呈現(xiàn)。了解頁生命周期非常重要,因為這樣做就能在生命周期的合適階段編 寫代碼,以達到預(yù)期效果。 為了克服 web 編程的這一固有的局限性,web 頁框架包含幾種狀態(tài)管理功 能,可以在往返過程之間將頁和控件值保存到 web 服務(wù)器。狀態(tài)保持是對同一 頁

17、或不同頁的多個請求維護狀態(tài)和頁信息的過程。 cgi 的中文名稱是通用網(wǎng)關(guān)接口(common gateway interface,cgi)的簡稱。 它是一種基于 web 服務(wù)器與其它外部程序進行通訊的一個接口標準。通過它外 部程序不僅僅可以在服務(wù)器上生成文字等靜態(tài)內(nèi)容,還可以生成表格、圖像、聲 音等一些生動的動態(tài)內(nèi)容。 cgi 是工作在服務(wù)器上的,它的主要工作原理是:客戶端通過傳遞一些信息 給服務(wù)器,服務(wù)器獲取到這些信息后去啟動 cgi 的相關(guān)程序來完成的1。cgi 是 架在服務(wù)器上的連接客戶端與外部執(zhí)行程序的一道橋梁,它通過系統(tǒng)變量或者文 件將處理后的結(jié)果返回給服務(wù)器,服務(wù)器讀取這些內(nèi)容后再回

18、顯給客戶端程序, 由此完成一個客戶端到服務(wù)器端、接著由服務(wù)器端到外部執(zhí)行程序、然后再由外 部執(zhí)行程序返回結(jié)果給服務(wù)器、最后由服務(wù)器回顯結(jié)果給客戶端的一個完整的交 互過程2。由于 cgi 是工作在服務(wù)器上的,所以借助于它的服務(wù)器程序就可以讀 取 sql 數(shù)據(jù)庫文件,從而使服務(wù)器程序具有數(shù)據(jù)存儲與處理的能力。 cgi(common gateway interface: 公用網(wǎng)關(guān)接口)規(guī)定了 web 服務(wù)器調(diào)用 其他可執(zhí)行程序(cgi 程序)的接口協(xié)議標準3。web 服務(wù)器通過調(diào)用 cgi 程序 實現(xiàn)和 web 瀏覽器的交互,也就是 cgi 程序接受 web 瀏覽器發(fā)送給 web 服務(wù)器 的信息,進

19、行處理,將響應(yīng)結(jié)果再回送給 web 服務(wù)器及 web 瀏覽器4。cgi 程序一 般完成 web 網(wǎng)頁中表單(form)數(shù)據(jù)的處理、數(shù)據(jù)庫查詢和實現(xiàn)與傳統(tǒng)應(yīng)用系 統(tǒng)的集成等工作。 cgi 程序可以用任何程序設(shè)計語言編寫,如 shell 腳本語言、 perl、fortran、pascal、c 語言、php、asp、jsp 等,自 cgi 產(chǎn)生以來,c 語言 以其高效性、靈活性和通用性一直是開發(fā)交互式 web 應(yīng)用的最有吸引力的選擇5。 雖然用 c 語言編寫的 cgi 程序具有執(zhí)行速度快、安全性高(因為 c 語言程序 是編譯執(zhí)行且不可被修改)等特點,但近年來,能直接內(nèi)嵌于 html 文檔中間的 各種

20、腳本工具,如 php、asp、jsp 等,以其簡便性、易用性使一部分用戶開始放 棄了直接用 c 語言來開發(fā) cgi 腳本6。 但還有兩類用戶沒有放棄用 c 語言來開發(fā)它們的應(yīng)用:一是對性能追求較高 的高端開發(fā)者;二是嵌入式設(shè)備的開發(fā)人員7。前者選擇 c 語言來開發(fā)它們的 web 應(yīng)用,是因為 c 高效性、靈活性和通用性是各種腳本工具無法取代的。后者 選擇 c 語言,是因嵌入式設(shè)備的特點(內(nèi)存、cpu 等資源有限等,不可在設(shè)備上 運行如 asp,php,perl 等的腳本的運行環(huán)境)決定的(另外,目前嵌入式設(shè)備 主要以 c 語言開發(fā)為主)8。 自 cgi 出現(xiàn)以來,就有人開發(fā)方便 c 語言開發(fā)的

21、開發(fā)庫 cgilib,從目前的情 況看 cgilib 并沒有得到廣泛的應(yīng)用;而諸如 php、asp、jsp 等各種腳本開發(fā)工具, 它們則受到 web 開發(fā)者的直接異常青睞9。對比后不難發(fā)現(xiàn),相對于 php、asp、jsp 等腳本工具來說,c 語言缺乏強有力的字符串處理能力,同時基 于 c 語言的 cgilib 對越來越多的交互式 web 應(yīng)用需求支持不夠,如頁面模板支 持、session 功能等,讓使用者輸出 html 文檔時非常煩瑣,源代碼可讀性較差, 維護困難,導(dǎo)致開發(fā)速度慢,因此在實際應(yīng)用中應(yīng)用 c 語言做為 cgi 開發(fā)工具的 越來越少。 由于電子商務(wù)的運作,客戶端狀態(tài)保持機制 coo

22、kie、服務(wù)器端狀態(tài)保持機制 session 應(yīng)運而生,被 php、asp、jsp 等各種語言應(yīng)用在用戶認證、安全機制、 購物車等功能上面,而目前各種 c 語言的 cgilib 僅僅支持客戶端狀態(tài)保持機制 cookie,而在服務(wù)器端狀態(tài)保持機制 session 方面還難以見到相關(guān)文獻和相關(guān)的 cgilib10。本課題將在 cgi 的服務(wù)器端狀態(tài)保持機制 session 方面進行探索,擴 展 c 語言的 cgilib 在電子商務(wù)上的應(yīng)用。 藝龍旅行網(wǎng) (nasdaq: long)是中國領(lǐng)先的在線旅行服務(wù)提供商之一,為消 費者提供酒店、機票和度假等全方位的旅行產(chǎn)品預(yù)訂服務(wù),遂寧藝龍旅行網(wǎng)是藝 龍旅

23、行網(wǎng)的重要分站之一。由于遂寧市旅游資源豐富,促使了遂寧旅游業(yè)高速發(fā) 展,因此服務(wù)于旅游業(yè)的相關(guān)行業(yè)也飛速的發(fā)展著。遂寧藝龍旅行網(wǎng)是遂寧市最 大的旅游相關(guān)資源定購的服務(wù)平臺,為到遂寧旅游的廣大人士提供機票預(yù)定、酒 店預(yù)定等相關(guān)業(yè)務(wù)。因此遂寧藝龍旅行網(wǎng)的同時在線訪問量較大,由此就造成了 服務(wù)器經(jīng)常發(fā)生異常而導(dǎo)致服務(wù)器狀態(tài)丟失,從而導(dǎo)致遂寧藝龍在用戶心里的滿 意度一再下降。 為了解決遂寧市藝龍旅游網(wǎng)同時在線用戶數(shù)較多時,而出現(xiàn)的服務(wù)器狀態(tài)丟 失的問題正是本課課題的研究目標。 1.2 國內(nèi)外研究現(xiàn)狀 cgi 函數(shù)庫的嚴重缺乏是導(dǎo)致用 cgi 開發(fā) web 應(yīng)用大量減少重要原因,目前 網(wǎng)上流行的 cgi

24、 函數(shù)庫主要是國外的 cgilib 和 libcgic,但同出開源的兩者都只擁 有少的可憐的參考資料和說明文檔,參考資料更是寥寥無幾,相比之下 asp、jsp 等 web 開發(fā)語言卻擁有大量豐富的類庫和開發(fā)資料。因此 lapc/f 架構(gòu)組花費數(shù) 月時間研究了 cgi 規(guī)范和 cgilib、libcgic 函數(shù)庫,開發(fā)出集大成者 icgi 函數(shù)庫, 擁有使用簡單、功能強大、方案完整等諸多特點,還包含獨創(chuàng)的 html 模板技術(shù), 使得 cgi(c)開發(fā)變得快捷和高效 。 icgi 函數(shù)庫(/index/index.html)主要包含表單

25、處理函數(shù)子庫 cgiform、網(wǎng)址解析函數(shù)子庫 cgiquery、瀏覽器會話函數(shù)子庫 cgicookie 三大子庫以及其它子庫11。表單處理 cgiform 函數(shù)子庫主要處理瀏覽 器端表單數(shù)據(jù)(包含上傳文件數(shù)據(jù))的讀取和分析,實現(xiàn)服務(wù)端應(yīng)用獲取瀏覽器 端表單數(shù)據(jù)完整解決方案。網(wǎng)址解析 cgiquery 函數(shù)子庫主要處理瀏覽器訪問網(wǎng) 址的讀取和分析,實現(xiàn)服務(wù)端應(yīng)用獲取用戶訪問網(wǎng)址數(shù)據(jù)處理完整解決方案。瀏 覽器會話 cgicookie 函數(shù)子庫主要處理瀏覽器與服務(wù)器交互會話時使用的 cookie 數(shù)據(jù)的讀寫,實現(xiàn)服務(wù)端應(yīng)用讀寫 cookie 數(shù)據(jù)完整解決方案。cgi 籠統(tǒng)函數(shù)子庫 cgigener

26、al 封裝了對 cgi 環(huán)境訪問。html 模板子庫 cgihtml 完整的實現(xiàn)了 html 模板功能。cgi 流編碼庫 cgimime 提供了兩種主流編碼的編碼解碼功能。 url 解析函數(shù)子庫 cgiurl 提供了原始的 url 編碼解碼功能。 國外 cgilib 庫主要有 thomas boutell 開發(fā)的 cgic 開發(fā)包,當前最新版本 是 2.05,cgic 是用來生成基于 cgi 的 web 應(yīng)用程序的 c 語言函數(shù)庫,它有以下功 能: 對數(shù)據(jù)進行語法分析;接收以 get 和 psot 兩種方式發(fā)送的數(shù)據(jù);把 form 中的不同域連接成連續(xù)的串;為檢索 form 數(shù)據(jù)而提供字符串,

27、整數(shù),浮點以及單 項和多項選擇功能;為數(shù)字字段提供邊界檢測 ;把 cgi 環(huán)境變量加載到非空的 c 串中;為調(diào)試而捕捉 cgi 狀態(tài) ;提供相對安全的系統(tǒng)調(diào)用功能12。 國內(nèi) cgilib 庫主要有 開發(fā)的 sky cgi lib ,能夠在 fastcgi 模式,或者非 fastcgi 模式下,在 apache 或者 iis 等服務(wù)器上穩(wěn)定地開發(fā)和 運行13。sky cgi lib 的函數(shù)有六類:內(nèi)存管理、輸入、處理、保存、輸出、前 五類函數(shù)的支持函數(shù),完成 cookie、表單、文件等 cgi 數(shù)據(jù)的解析、保存、發(fā) 送等功能。 國內(nèi)、國外的較知名的 c 語言 cgilib 都沒有對服務(wù)器端狀態(tài)

28、保持機制 session 功能支持,因此本課題對服務(wù)器端狀態(tài)保持機制 session 功能的支持必然 可以擴大 c 語言的 cgilib 在電子商務(wù)上的應(yīng)用。 1.3 課題研究內(nèi)容 1.3.1 研究內(nèi)容 本課題通過分析不同腳本語言對服務(wù)器端狀態(tài)保持機制 session 技術(shù)的差別, 基于 c 語言開發(fā)代碼的靈活性,實現(xiàn) c 語言 cgilib 的服務(wù)器端狀態(tài)保持機制 session 技術(shù),并與 php、jsp 等腳本語言實現(xiàn) session 共享,利用服務(wù)器端 session 狀態(tài)保持技術(shù),結(jié)合客戶端狀態(tài)保持機制 cookie 技術(shù),極大地提升 cgilib 類庫在電子商務(wù)應(yīng)用的便捷性與安全性

29、。 1.3.2 研究目標 通過對不同腳本語言在服務(wù)器端狀態(tài)保持機制 session 技術(shù)的特點進行分析, 并分析得出各種服務(wù)器狀態(tài)保持機制的共有性特點, 結(jié)合分析結(jié)果編寫出基于 vc+語言的服務(wù)器狀態(tài)監(jiān)控器,運用 cgi 腳本與服務(wù)器進行交互,針對服務(wù)器 session 機制進行優(yōu)化并加強,從而確保服務(wù)器端狀態(tài)保持機制的完善并保證其 穩(wěn)定的運行。 第二章 系統(tǒng)的理論基礎(chǔ) 2.1 c 語言簡介 2.1.1 c 語言的定義 c 語言是 combined language(組合語言)的中英混合簡稱。是一種林立 于當今各種計算機語言之林的一種程序設(shè)計語言14。c 語言是一種完善的程序設(shè) 計語言,它即包

30、含匯編語言的初級特性,以兼有高級語言的很多特性。c 語言可 以做為底層語言,編寫基于特定操作系統(tǒng)的或硬件的特定的程序;還可以作為應(yīng) 用程序設(shè)計語言,編寫不依賴計算機硬件的通用應(yīng)用程序。c 語言所具這些特性, 使得它的應(yīng)用領(lǐng)域相當?shù)膹V泛,不僅僅是在軟件開發(fā)過程使我們經(jīng)常見到它的身 影,就連各類科研領(lǐng)域中它的身影也是屢見不鮮。 2.1.2 c 語言的發(fā)展歷史 c 語言也稱為 a 語言,它的原型 algol 60 語言。1972 年,美國貝爾實驗 室的 dennis ritchie 在 b 語言的基礎(chǔ)上創(chuàng)造了 c 語言。b 語言是美國貝爾實驗室 的 ken thompson 于 1970 年,以 b

31、cpl(basic combined programming language,基本組合編程語言)為基礎(chǔ)設(shè)計出來的15。 c 語言從 1963 年其前身 algol 60 一直到 1994 年的 iso 標準制定的過程中 經(jīng)歷了 30 多年的發(fā)展,其中主要的歷程如下: 1963 年,劍橋大學(xué)將 algol 60 語言發(fā)展成為 cpl(combined programming language)語言,標志著 c 語言時代的開始。 1972 年,經(jīng)美國貝爾實驗室的 d.m.ritchie 在 b 語言的基礎(chǔ)上最終設(shè)計出了 一種新的語言,他取了 bcpl 的第二個字母作為這種語言的名字,這就是 c

32、語言。 1978 年,這一年標志著 c 語言的名稱正式形成。美國電話電報公司(atname2=value2;exprires=date;path=path;domiam=domain_ name;secure 現(xiàn)在逐個來解釋以上響應(yīng)頭各項的含義,各項內(nèi)容是用分號隔開的。 name1=value 和 name2=value2 就是你要設(shè)置的 cookie 的內(nèi)容,它是以名字 =值的方式發(fā)送的,而 name=value 中不可以有冒號、逗號、和空格,但可以用% xx 代替,xx 為一個 16 進制數(shù); expires=date 項是有關(guān) cookies 的生存期,即該 cookie 的有效期,有效

33、期 的時間格式是格林威治時間格式:wdy,dd-mon-yyyy hh:mm:ss gmt http 應(yīng)用曾經(jīng)一直允許三種不同日期/時間格式: sun, 06 nov 1994 08:49:37 gmt; rfc 822, updated by rfc 1123 sunday, 06-nov-94 08:49:37 gmt; rfc 850, obsolete by rfc 1036 sun nov 6 08:49:37 1994; ansi cs as time() format 第一種格式是作為 internet 標準提出來的,它是一個國定長度的,由 rfc 1123(rfc 822 的升

34、級版本)定義的一個子集。第二種格式使用比較普遍,但是 基于廢棄的 rfc 850,并且沒有年份。如果 http/1.1 客戶端和服務(wù)器解析日期, 他們必須能接收所有三種格式(為了兼容 http/1.0),但是它們只能產(chǎn)生 rfc 1123 里定義的日期格式來填充頭域(header field)用到日期的地方。 這一項在寫入 cooie 時是可選的,但不設(shè)置的話瀏覽器與 web 服務(wù)器的一次 連接結(jié)束后,cookie 就過了有效期;即關(guān)閉瀏覽器后,cookie 失效。 根據(jù) cookie 壽命的長短,可分為 session cookie 和 persistent cookie。 session

35、cookie 即 expires 取系統(tǒng)默認值,使得此 cookie 只是存活于整個 會話過程中,待會話結(jié)束即自動刪除,存貯位置為客戶瀏覽器內(nèi); persistent cookie 則指明 expires 的值,并以文件形式存儲在客戶端計算 機中。 domain 項定義哪些主機可以讀取 cookie,通常 cookie 存放的都不重要的信 息,如果你要存放的的信息不大重要,這一項也不用設(shè)置; path 項是定義了一臺主機上哪些 web 資源可以讀取你所設(shè)置的 cookie,如 果 path=/ 則這臺主機上所有 web 資源可以讀取你所設(shè)置的 cookie; secure 是有關(guān)加密傳送可不用

36、理會 如果在一臺支持 cookie 的客戶端設(shè)置了 cookie,當這個客戶端在次來訪問 時,瀏覽器會向 cgi 所在的 web 服務(wù)器發(fā)送一條 http 響應(yīng)頭,這個響應(yīng)頭為: cookie:name1=value;name2=value2;exprires=date;path=path;domiam=dom ain_name;secure 根據(jù)這個 http 響應(yīng)頭 web 服務(wù)器的環(huán)境變量 http_cookie=:name1=value;name2=value2 對這個環(huán)境變量的內(nèi)容進行分解就可以的到需要的信息。 4.4.2 cookie 的限制 因為 cookie 常常用來存取訪問者

37、的重要數(shù)據(jù),為了怕被拿來亂用,導(dǎo)致訪問者 的數(shù)據(jù)泄露,所以對 cookie 做出了以下的限制: 每個訪問者的瀏覽器只能存取 300 個 cookie 每個瀏覽器只能針對某個服務(wù)器存取 20 個 cookie 有些瀏覽器可以把 cookie 的功能關(guān)掉,若關(guān)掉后 cookie 就不能使用 cookie 是由 web 服務(wù)器保存在用戶瀏覽器上的小文本文件,它包含有關(guān)用 戶的信息。cookie 對于用戶來說是透明的。 所以必須嚴格設(shè)計并保護 cookie 不被非法篡改。 其實,網(wǎng)站以外的用戶無法跨過網(wǎng)站來獲得 cookie 信息。如果因為這種擔(dān)心 而屏蔽 cookie,肯定會因此拒絕訪問許多站點頁面

38、。因為,當今有許多 web 站 點開發(fā)人員使用 cookie 技術(shù)。 4.5 session 機制設(shè)計 當程序需要為某個客戶端的請求創(chuàng)建一個 session 的時候,服務(wù)器首先檢查 這個客戶端的請求里是否已包含了一個 session 標識 - 稱為 session id,如果已包 含一個 session id 則說明以前已經(jīng)為此客戶端創(chuàng)建過 session,服務(wù)器就按照 session id 把這個 session 檢索出來使用(如果檢索不到,可能會新建一個),如 果客戶端請求不包含 session id,則為此客戶端創(chuàng)建一個 session 并且生成一個與 此 session 相關(guān)聯(lián)的 se

39、ssion id,session id 的值應(yīng)該是一個既不會重復(fù),又不容 易被找到規(guī)律以仿造的字符串,這個 session id 將被在本次響應(yīng)中返回給客戶端 保存。利用 md5 算法生成一個隨機的 32 字節(jié)的 session_id。會話的 id 是會話的 唯一標識,其是實現(xiàn)狀態(tài)保持的重要基礎(chǔ)。md5 算法是 md4 報文摘要算法的擴 展。 保存這個 session id 的方式可以采用 cookie,這樣在交互過程中瀏覽器可以 自動的按照規(guī)則把這個標識發(fā)揮給服務(wù)器。一般這個 cookie 的名字都是類似于 seeesionid, session 可以在 web 數(shù)據(jù)庫、交互式動態(tài)網(wǎng)站、各類

40、基于 web 的管理系統(tǒng)、 電子商務(wù)等系統(tǒng)中被使用,根據(jù) session 在系統(tǒng)中應(yīng)用主要可以分為兩大類:一 類是用于身份認證的狀態(tài)保持;另一類是用于電子商務(wù)網(wǎng)站購物車的狀態(tài)保持。 http 協(xié)議采用一次連接和無記憶的方式來進行通訊。一次連接指的是用戶 向服務(wù)器發(fā)送了一個請求。無狀態(tài)記憶指的就是 web 服務(wù)器并不進行事物處理 的記憶,通過 http 協(xié)議進行的兩次連接之間沒有任何關(guān)系。也就是說,后續(xù)的 連接無法得到有關(guān)上次連接的任何信息。 由于 http 協(xié)議的無記憶性,使得每個 web 頁面相互獨立,頁面之間缺少 必然的因果關(guān)系,可以通過 url 跳過某個頁面而直接去訪問其它頁面,使得基于

41、 web 應(yīng)用程序數(shù)據(jù)訪問的安全存在很大問題。 會話可以認為是某個用戶和服務(wù)器之間的一系列相關(guān)的交互,這個交互會持 續(xù)一段時間。對于單個用戶而言,會話過程的開始以用戶開始訪問某個網(wǎng)站為標 志,會話過程的結(jié)束以用戶結(jié)束對該網(wǎng)站的訪問為標志。不同的用戶對應(yīng)著不同 的會話過程,不同的會話過程之間互不干涉,互不影響。 在客戶端打開多個瀏覽器,此時服務(wù)器端會因為 session 數(shù)量增加而影響性 能。 4.6 系統(tǒng)詳細設(shè)計 本系統(tǒng)的核心組件分為:connector 和 container。connector 主要負責(zé)對 外交流,可以比作為一座對外交流的橋梁,container 是內(nèi)部的核心業(yè)務(wù)處理的 容

42、器,主要處理 connector 接受的請求、內(nèi)部事務(wù)等操作。service 服務(wù)則將 connector 與 container 連接在一起,共同組成本系統(tǒng)的核心組件,并且對外提 供業(yè)務(wù)服務(wù)。當然要組成這個組件還要很多其它的元素。本系統(tǒng)的系統(tǒng)配置圖設(shè) 計圖見圖 4-3 所示。 圖 4-3 系統(tǒng)配置圖 4.6.1 connector 組件設(shè)計 connector 組件是系統(tǒng)中兩個核心組件之一,它的主要任務(wù)是負責(zé)接收瀏覽 器的發(fā)過來的 tcp 連接請求,創(chuàng)建一個 request 和 response 對象分別用于和請 求端交換數(shù)據(jù),然后會產(chǎn)生一個線程來處理這個請求并把產(chǎn)生的 request 和

43、response 對象傳給處理這個請求的線程,處理這個請求的線程就是 container 組件要做的事了。connector 組件進行請求接收的大體時序圖見圖 4-4 所示。 圖 4-4 connector 組件請求接收時序圖 connector 最重要的功能就是接收連接請求然后分配線程讓 container 來處 理這個請求,所以這必然是多線程的,多線程的處理是 connector 設(shè)計的核心。 tomcat5 將這個過程更加細化,它將 connector 劃分成 connector、processor、protocol, 另外 coyote 也定義自己的 request 和 respons

44、e 對象。connector 的主要類圖見圖 4-5 所示。 圖 4-5 connector 相關(guān)的主要類圖 4.6.2 container 組件設(shè)計 當 connector 接受到一個連接請求時,將請求交給 container,container 處理這個請求的時序圖見圖 4-6 與圖 4-7 所示。 圖 4-6 engine 和 host 處理請求的時序圖 圖 4-7 context 和 wrapper 的處理請求時序圖 container 是容器的父接口,所有子容器都必須實現(xiàn)這個接口,container 容 器的設(shè)計采用典型的責(zé)任鏈的設(shè)計模式,它有四個子容器組件構(gòu)成,分別是: engin

45、e、host、context、wrapper,這四個組件不是平行的,而是父子關(guān)系, engine 包含 host,host 包含 context,context 包含 wrapper。通常一個 class 對應(yīng)一個 wrapper,如果有多個 class 就可以定義多個 wrapper,如果有多個 wrapper 就要定義一個更高的 container 了。container 相關(guān)的主要的類圖見圖 4-8 所示。 圖 4-8 container 主要類圖 4.6.3 host 設(shè)計 host 是 engine 的字容器,一個 host 在 engine 中代表一個虛擬主機,這 個虛擬主機的作用

46、就是運行多個應(yīng)用,它負責(zé)安裝和展開這些應(yīng)用,并且標識這 個應(yīng)用以便能夠區(qū)分它們。它的子容器通常是 context,它除了關(guān)聯(lián)子容器外, 還有就是保存一個主機應(yīng)該有的信息。除了所有容器都繼承的 containerbase 外, standardhost 還實現(xiàn)了 deployer 接口。host 組件相關(guān)的類關(guān)聯(lián)圖見圖 4-9 所 示。 圖 4-9 host 組件類圖 4.7 系統(tǒng)組件間接口設(shè)計 4.7.1 service 接口設(shè)計 在我們設(shè)計的服務(wù)器狀態(tài)監(jiān)控系統(tǒng)中 connector、container 作為一個整體, connector 主要負責(zé)對外交流,container 主要處理 con

47、nector 接受的請求,主要 是處理內(nèi)部事務(wù) l。service 就是連接這對組成的橋梁,service 將它們連接在一 起,共同為系統(tǒng)提供功能支持。 簡單地說,service 只是在 connector 和 container 外面多包一層,把它們組 裝在一起,向外面提供服務(wù),一個 service 可以設(shè)置多個 connector,但是只能 有一個 container 容器。這個 service 接口的方法定義圖見圖 4-10 所示。 圖 4-10 service 接口設(shè)計 4.7.2 standardservice 接口設(shè)計 service 接口的標準實現(xiàn)類是 standardservi

48、ce 它不僅實現(xiàn)了 service 借口 同時還實現(xiàn)了 lifecycle 接口,這樣它就可以控制它下面的組件的生命周期了。 standardservice 接口圖如圖 4-11 所示。 圖 4-11 standardservice 接口圖 第五章 服務(wù)器狀態(tài)保持機制的實現(xiàn) 5.1 cgi 配置文件的實現(xiàn) cgi 配置文件存放 cgi 程序的初始設(shè)置值。在不同操作系統(tǒng)下 cgi 接口也不 相同。根據(jù) cgi 的接口類型來分,可以將 cgi 分為 standard cgi 接口、dos cgi 接口與 win cg i 接口等幾種。每種 cgi 接口的描述如下: standard cgi 接口:

49、使用這種接口的 cgi 應(yīng)用程序主要使用環(huán)境變量來實 現(xiàn)與 web 服務(wù)器與之間的通信,standard cgi 接口主要應(yīng)用于 unix 系 統(tǒng)。 dos cgi 接口:它也是使用環(huán)境變量來與服務(wù)器進行通信的,接口原理類 同于 standard cgi。 win cgi 接口:win cgi 接口主要應(yīng)用于 windows 操作系統(tǒng)。近年來隨 著越來越多的 web 服務(wù)器采用 windows 系統(tǒng),然而 windows 系統(tǒng)又 不能有效地傳遞環(huán)境變量,所以 bob denny 提出了一種新的 windows cgi 標準,這就是 win cgi 接口,并得以不斷推廣。win cgi 不同于前

50、 面二種接口通過環(huán)境變量來與服務(wù)器通信,而是采用.ini 文件來與服務(wù)器 進行聯(lián)系的。 在 windows 操作系統(tǒng)下, win cgi 程序與 web 服務(wù)器之間也正是通過 ini 類型的配置文件來實現(xiàn)聯(lián)系的。當 web 客戶端通過瀏覽器將 url 參數(shù)傳遞到 web 服務(wù)器后,調(diào)用 web 服務(wù)器觸發(fā) cgi 程序時,web 服務(wù)器首先根據(jù)調(diào)用的 參數(shù)類型調(diào)用合適的 cgi 處理程序,同時動態(tài)生成幾個文件存放于臨時目錄下, 這些文件分為.ini(cgi 初始配置文件)、.inp(cgi 處理輸入文件)、.out(cgi 處理輸出文件)等文件。在 web 服務(wù)器生成 cgi 程序的進程的同時

51、,通過命令 行參數(shù)將.ini 配置文件的絕對路徑傳給 cgi 進程。此時 cgi 處理進程通過讀取指 定路徑下的.ini 文件中所包含的.inp、.out 等文件路徑信息。經(jīng)過這些步驟后 cgi 程序所需要的初始參數(shù)已經(jīng)收集完成。之后,cgi 程序可讀取.ini 和.inp 文件所提 供的信息,讀取所有來自 web 服務(wù)器端和與 web 客戶端端的數(shù)據(jù)。然后,cgi 程序可以根據(jù)客戶端傳遞參數(shù)的實際需要調(diào)用外部程序,或由 cgi 直接執(zhí)行外部 程序的功能,并將要傳給客戶端的信息以 html 文本的形式寫在.out 文件上。最 后,web 服務(wù)器取.out 文件的 html 文本,將信息傳送給

52、web 客戶端,并刪除 臨時目錄下的所有文件。到此一個完整的客戶端與 cgi 程序進行通信的完整流程 已經(jīng)完成了。 cgi 的配置文件包含了什么數(shù)據(jù)呢?其實 cgi 配置文件就是一個普通的 windows .ini 文件,與普通的.ini 文件一樣,cgi 配置文件包含了許多 session, 每個 session 又包含一些 key,以下是一個 cgi 配置的部份內(nèi)容。 cgi /設(shè)定服務(wù)器處理結(jié)果的傳遞方式,即 html 中的 form method 中的 get,post,head 等。 request method=post /指定服務(wù)器的監(jiān)控的名稱與版本 server softwar

53、e=website/1.1e /指定服務(wù)器的 ip 地址。 server name=19 /指定服務(wù)器監(jiān)聽的端口 server port=80 /服務(wù)器管理者的 e-mail 地址,當需要發(fā)送郵件時使用默認郵件地址 server admin= /主頁的 url 路徑。 referer=19/ /指定客戶端的網(wǎng)絡(luò)地址。 remote address=00 system /cgi 處理輸出文件的路徑名。 output file=c:websitecgi-biniodirprocess.out /cgi 處理輸入文件的路徑

54、名。 content file=c:websitecgi-biniodirprocess.inp form literal type=b/接收到的 form data 即 client 端動作的結(jié)果信息。 5.2 服務(wù)器狀態(tài)監(jiān)控設(shè)置窗口的實現(xiàn) 5.2.1 服務(wù)器監(jiān)控設(shè)置界面的實現(xiàn) 服務(wù)器端的主要功能是對服務(wù)器提供的服務(wù)進行實時監(jiān)控。一旦服務(wù)出現(xiàn)問 題,監(jiān)控程序?qū)⒉扇∠鄳?yīng)的措施,包括自動重啟 web 服務(wù),出現(xiàn)故障按要求執(zhí) 行一定的命令序列,當機自動重啟服務(wù)器,實時記錄服務(wù)日志,每天可定時啟動 服務(wù)器等。從而可以最大限度地對用戶提供 internet 服務(wù),最大限度地提高服務(wù) 器數(shù)字資源的利用率

55、。 對服務(wù)器狀態(tài)的保持首先要對服務(wù)器狀態(tài)進行監(jiān)控,對服務(wù)器的運行狀態(tài)進 行系統(tǒng)快照保存,將服務(wù)器上運行的 web 服務(wù)器的 session 信息進行緩存保存。 當系統(tǒng)發(fā)生異常時以便程序可以自動的加載緩存記錄,恢復(fù)服務(wù)器的狀態(tài)。服務(wù) 器狀態(tài)監(jiān)控設(shè)置窗口界面見圖 5-1 所示。 圖 5-1 服務(wù)器狀態(tài)監(jiān)控設(shè)置界面 5.2.2 服務(wù)器監(jiān)控設(shè)置界面的代碼實現(xiàn) /*開始消息映射*/ begin_message_map(cserverstateholdapp, cwinapp) on_command(id_app_about, assert_valid(pdoc); if (!pdoc) return;

56、5.3 服務(wù)器狀態(tài)保持功能的實現(xiàn) 5.3.1 服務(wù)器狀態(tài)保持實現(xiàn)步驟 監(jiān)控端可以同時對多臺服務(wù)器提供的多個服務(wù)進行監(jiān)控,實行多線程管理, 可以在遠程任何能訪問服務(wù)器的地方進行實時監(jiān)控服務(wù)器運行 狀況??梢噪S意 增加、刪除、修改需要監(jiān)控的服務(wù),具有鎖定本機桌面、重啟 iis 服務(wù)、發(fā)送 dos 命令、重啟服務(wù)器、關(guān)閉服務(wù)器、遠程桌面 控制、遠程文件傳輸、網(wǎng)絡(luò)校 時等功能。如果任何一臺服務(wù)器出現(xiàn)問題,監(jiān)控端會連續(xù)不斷地播放音樂、或用 揚聲 器 報警,直至所有服務(wù)正常。也可對相應(yīng)的系統(tǒng)管理員發(fā)送郵件,提示故 障信息。 對于客戶端的每一次登陸,在服務(wù)器生成一個 session,作為一個文件存儲在 服務(wù)

57、器上,例如在“/tmp”下。文件命名為 sess_開頭,在加上一個隨機的字符 串,這個字符串稱之為 session_id。 在文件中存儲的內(nèi)容包括: 1、用戶的最后一次活動時間。(用來檢查用戶是否長時間沒有操作,視為 已經(jīng)退出登陸)。 2、一個隨機的字符串。(用來驗證客戶端的身份,這個字符串同時作為 cookie 發(fā)往客戶端)。 3、客戶端的 ip. 4、實際要存儲的數(shù)據(jù)。例如用戶的 id,密碼等。 在用戶登陸時,生成這個文件,并且,將那個隨機字符串發(fā)到客戶端的 cookie。在以后的每個頁面的超連接,或是 form 中的要跟入 session_id。每個 頁面開始后,需要執(zhí)行的步驟包括: 1

58、、檢查是否超時。 2、對比 cookie 中的字符串和 session 文件中的,驗證客戶身份。 3、對比客戶端 ip 和 session 文件中的 ip,驗證客戶身份。 4、讀出數(shù)據(jù),供下面程序使用 5、刷新最后活動時間 6、生成新的隨機字符串,刷新 session 中對應(yīng)部分,并將其作為 cookie 發(fā) 往客戶端。 服務(wù)器狀態(tài)查看界面見圖 5-2 所示。 圖 5-2 服務(wù)器狀態(tài)查看界面 5.3.2 代碼實現(xiàn) #include #include #include #include #include #include #include #include #define remote_addr

59、1 getenv(remote_addr) #define http_cookie getenv(http_cookie) char *sess_user_name; char *sess_user_pwd; static void print_session_error(char *); static void clean_session_file(); /*set_session()在登陸是調(diào)用,啟動服務(wù)器端狀態(tài)監(jiān)控*/ char *set_session(char *name,char *pwd) char str_now11; char hash_key17; char *sessio

60、n_id; time_t now; file *sf; char sfp32; int i,temp,r; time( /*清理服務(wù)器端超時 session*/ clean_session_file(); /* * get str_now */ sprintf(str_now,%10d,now); /* * get random hash_key */ srand(now); r = rand(); for(i=0;i16;i+) srand(r); r = rand(); hash_key = r%26 + a; hash_key16 = 0; /* * get more random se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論