• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于PHP的WEB應(yīng)用系統(tǒng)單點(diǎn)登錄的研究與實(shí)現(xiàn)

      2010-07-12 08:18:36陳海虹
      關(guān)鍵詞:表單單點(diǎn)客戶端

      陳海虹

      (浙江海洋學(xué)院網(wǎng)絡(luò)中心,浙江舟山 316004)

      如今不論是高校還是企事業(yè)單位,WEB應(yīng)用系統(tǒng)日漸增多,每個應(yīng)用系統(tǒng)都有自己的用戶管理機(jī)制和身份認(rèn)證機(jī)制。用戶需要記住多個甚至十幾個系統(tǒng)的賬號和密碼,登錄許多應(yīng)用系統(tǒng)才能完成他們的日常工作。所以,需要在多個WEB應(yīng)用系統(tǒng)中實(shí)施單點(diǎn)登錄方案,用戶只需要登錄1次就可以訪問所有相互信任的應(yīng)用系統(tǒng),并且在系統(tǒng)之間切換時,將不再受到訪問限制。目前實(shí)現(xiàn)單點(diǎn)登錄的技術(shù)主要有2種:一種是采用1個具有單點(diǎn)登錄功能的協(xié)議來完成;一種是利用業(yè)界常用的“偽登錄”技術(shù)。采用具有單點(diǎn)登錄功能的協(xié)議來完成的一個典型代表就是使用Kerberos協(xié)議,Kerberos協(xié)議提供了采用票據(jù)來訪問目標(biāo)系統(tǒng),這也是目前采用的一種比較流行的單點(diǎn)登錄技術(shù),它具有更安全、更具彈性、更高效率的優(yōu)點(diǎn)[1]。但是也有一定的不足,它需要對目標(biāo)系統(tǒng)或目標(biāo)服務(wù)進(jìn)行協(xié)議化,同時需要對應(yīng)用系統(tǒng)做出適當(dāng)?shù)母脑?,這就限制了它對一些不愿開放的應(yīng)用系統(tǒng)的應(yīng)用。因?yàn)橐恍?yīng)用系統(tǒng)的結(jié)構(gòu)和接口不開放,造成了第三方無法與其對接,另外,還有一些企業(yè)也不愿意對系統(tǒng)進(jìn)行修改?!皞蔚卿洝奔夹g(shù),就是通過一些腳本自動為用戶輸入賬號和密碼,屏蔽用戶登錄目標(biāo)系統(tǒng),這種技術(shù)體現(xiàn)了與應(yīng)用系統(tǒng)的無關(guān)性,例如與應(yīng)用系統(tǒng)的平臺、開發(fā)環(huán)境、結(jié)構(gòu)、編程語言以及腳本,所以應(yīng)用系統(tǒng)無需做任何修改?;赑HP的WEB應(yīng)用系統(tǒng)單點(diǎn)登錄就是根據(jù)“偽登錄”技術(shù)原理,通過PHP語言并結(jié)合MySQL數(shù)據(jù)庫來實(shí)現(xiàn)單點(diǎn)登錄功能。

      1 開發(fā)技術(shù)簡述

      1.1 PHP和MYSQL技術(shù)介紹

      PHP語言是一種廣泛用于Web開發(fā)并可以嵌入HTML的多用途的腳本語言。PHP能運(yùn)行在包括Windows、Linux等在內(nèi)的絕大多數(shù)操作系統(tǒng)環(huán)境中,并支持Oracle、Sybase、MySQL、ODBC等在內(nèi)的大多數(shù)常見數(shù)據(jù)庫,具有很好的跨平臺性;PHP是開源軟件,代碼在許多工程師手中進(jìn)行了檢測,同時它與Apache編譯在一起的方式也可以讓它具有靈活的安全設(shè)定,具有了公認(rèn)的安全性能;PHP還具有占用系統(tǒng)資源少、代碼執(zhí)行速度快等優(yōu)勢。

      MySQL是個真正的多用戶、多線程SQL數(shù)據(jù)庫。它是完全免費(fèi)的,它的平臺無關(guān)性使其能在多個操作系統(tǒng)上運(yùn)行,其中包括UNIX、Linux、Solaris、SunOS、FreeBSD等,它還具有文件體積小、支持多線程、優(yōu)化SQL查詢算法、執(zhí)行速度快等優(yōu)勢。目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站和各種中小型數(shù)據(jù)庫管理工作,如財務(wù)、行政、金融、經(jīng)濟(jì)、統(tǒng)計和審計等領(lǐng)域。

      1.2 HTTP協(xié)議簡介[2]

      目前大部分WEB應(yīng)用系統(tǒng)的身份認(rèn)證技術(shù)在應(yīng)用層上是基于HTTP協(xié)議,HTTP協(xié)議采用了請求/響應(yīng)模型。通常,由HTTP客戶端發(fā)起一個請求,建立一個到服務(wù)器指定端口的TCP連接。HTTP服務(wù)器則在那個端口監(jiān)聽客戶端發(fā)送過來的請求,一旦收到請求,服務(wù)器向客戶端發(fā)回一個狀態(tài)行,比如“HTTP/1.1 200 OK”,和響應(yīng)的消息。HTTP請求報文格式為:請求行-通用信息頭-請求頭-實(shí)體頭-報文主體;響應(yīng)報文格式為:狀態(tài)行-通用信息頭-響應(yīng)頭-實(shí)體頭-報文主體。

      基于HTTP協(xié)議的客戶端訪問服務(wù)器包括4個過程,分別是建立TCP套接字連接、發(fā)送HTTP請求報文、接收HTTP應(yīng)答報文和關(guān)閉TCP套接字連接。HTTP協(xié)議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這里介紹最常用的GET方法和POST方法。當(dāng)客戶端要從服務(wù)器中讀取文檔時,使用GET方法。GET方法要求服務(wù)器將URL定位的資源放在響應(yīng)報文的數(shù)據(jù)部分,回送給客戶端。使用GET方法時,請求參數(shù)和對應(yīng)的值附加在URL后面,利用一個問號代表URL的結(jié)尾與請求參數(shù)的開始,傳遞參數(shù)長度受限制。當(dāng)客戶端給服務(wù)器提供信息較多時可以使用POST方法。POST方法將請求參數(shù)封裝在HTTP請求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù)。

      2 單點(diǎn)登錄功能總體設(shè)計

      2.1 庫表結(jié)構(gòu)設(shè)計

      每個WEB應(yīng)用系統(tǒng)幾乎都需要數(shù)據(jù)庫來存儲用戶的身份認(rèn)證信息和其他的數(shù)據(jù)信息,但是彼此數(shù)據(jù)庫的類型、庫表結(jié)構(gòu)、字段值、加密方式都不同,無法直接在各應(yīng)用系統(tǒng)的數(shù)據(jù)庫中讀出和操作用戶身份認(rèn)證信息。所以,需要一個獨(dú)立的數(shù)據(jù)庫來單獨(dú)存儲用戶在各應(yīng)用系統(tǒng)的身份認(rèn)證信息。

      本系統(tǒng)采用MySQL數(shù)據(jù)庫。數(shù)據(jù)結(jié)構(gòu)主要包含3張表,分別是:sso_app_info、sso_app_props、sso_login_info。

      sso_app_info表存放:PHP模擬HTTP客戶端登錄各應(yīng)用系統(tǒng)用到的數(shù)據(jù)信息、允許用戶輸入賬號密碼的表單元素名、用戶身份驗(yàn)證失敗應(yīng)用系統(tǒng)返回的信息。sso_app_props表存放:允許用戶輸入除賬號密碼外其它表單元素名,這張表中的數(shù)據(jù)主要用來構(gòu)建動態(tài)或靜態(tài)表單。sso_login_info表存放:用戶成功登錄各應(yīng)用系統(tǒng)的身份認(rèn)證信息。圖1是這個數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫模型圖。

      圖1 數(shù)據(jù)庫模型圖Fig.1 Database illustration of model

      2.2 總體設(shè)計思路

      單點(diǎn)登錄主要與應(yīng)用系統(tǒng)和用戶有關(guān),所以首先分配三個變量標(biāo)識應(yīng)用系統(tǒng)和用戶,它們分別是應(yīng)用系統(tǒng)的ID號、應(yīng)用系統(tǒng)名稱、用戶ID號,它們的值分別與表sso_app_info中的uid、name字段和表sso_login_info中的userid字段相對應(yīng)。單點(diǎn)登錄模型依據(jù)這3個值判斷哪個用戶登錄到哪個應(yīng)用系統(tǒng)。

      如果數(shù)據(jù)庫表sso_login_info中有符合這些變量的記錄,則說明用戶曾成功登錄過這個應(yīng)用系統(tǒng),取出庫中數(shù)據(jù),以URL形式或動態(tài)表單形式傳遞登錄數(shù)據(jù)并自動登錄到WEB應(yīng)用系統(tǒng)。

      如果沒有記錄,說明用戶首次登錄這個應(yīng)用系統(tǒng),由單點(diǎn)登錄系統(tǒng)生成或直接調(diào)用靜態(tài)表單頁面,讓用戶初次完成應(yīng)用系統(tǒng)認(rèn)證信息的輸入過程。并用PHP模擬瀏覽器客戶端傳遞用戶輸入的認(rèn)證信息,通過這個方法檢查用戶輸入的認(rèn)證信息是否能通過WEB應(yīng)用系統(tǒng)服務(wù)器的認(rèn)證。

      如果用戶輸入的認(rèn)證信息能通過WEB應(yīng)用系統(tǒng)服務(wù)器的認(rèn)證則將認(rèn)證信息存入庫中,并借助URL形式或者動態(tài)表單形式傳遞認(rèn)證信息并自動登錄應(yīng)用系統(tǒng),否則輸出錯誤信息。程序流程圖如圖2所示。

      圖2 總體設(shè)計程序流程圖Fig.2 The flowchart of system design

      3 關(guān)鍵技術(shù)分析

      3.1 PHP模擬瀏覽器登錄應(yīng)用系統(tǒng)服務(wù)器

      用戶輸入賬號、密碼等登錄信息后,應(yīng)用系統(tǒng)服務(wù)器需要判斷是否通過此認(rèn)證。可用PHP模擬HTTP客戶端,發(fā)送認(rèn)證信息及接收反饋信息,從反饋信息中判斷認(rèn)證是否被通過。PHP模擬HTTP客戶端的程序流程圖如圖3所示。fsockopen函數(shù)可以打開指定網(wǎng)域的TCP套接字連接或IP地址的TCP套接字連接,然后傳回1個文件指標(biāo),這可以和fwrite等函數(shù)一起使用。相關(guān)代碼[3]如下:

      圖3 PHP模擬瀏覽器登入流程圖Fig.3 The flowchart about using php to mimic browser logining

      3.2 生成具有靜態(tài)或動態(tài)表單的網(wǎng)頁,模擬應(yīng)用系統(tǒng)登錄界面

      表單是一個包含表單元素的區(qū)域,表單元素是允許用戶在表單中(比如文本域、下拉列表、單選框、復(fù)選框等等)輸入信息的元素。

      為了獲取不同應(yīng)用系統(tǒng)中不同用戶的登錄信息,需要預(yù)先生成供用戶填寫的模擬應(yīng)用系統(tǒng)登錄界面的表單。不同的應(yīng)用系統(tǒng)具有不同的表單元素,可以先分析各應(yīng)用系統(tǒng)的表單元素并存入數(shù)據(jù)庫中,然后利用PHP語言加載數(shù)據(jù)庫中的數(shù)據(jù)生成具有表單元素的登錄頁面,為了提高速度,再將動態(tài)頁面生成靜態(tài)頁面。相關(guān)代碼如下:

      代替用戶輸入認(rèn)證信息自動登入WEB應(yīng)用系統(tǒng)的步驟中也用到了表單。

      3.3提交認(rèn)證信息的請求方法

      為了達(dá)到程序的強(qiáng)健性,將HTTP協(xié)議中的GET和POST方法相結(jié)合來提交請求認(rèn)證信息,因?yàn)橛械南到y(tǒng)不支持跨域POST方法。GET方法將認(rèn)證請求信息放在URL中傳遞給系統(tǒng)服務(wù)器,POST方法是將認(rèn)證請求信息作為表單元素提交給系統(tǒng)服務(wù)器。相關(guān)代碼如下:

      4 結(jié)束語

      依據(jù)“偽登錄”技術(shù)原理采用PHP腳本語言自動為用戶輸入賬號和密碼,模擬用戶登錄應(yīng)用系統(tǒng)的單點(diǎn)登錄模型,使用戶只須完成最初的登錄過程就可以直接訪問應(yīng)用系統(tǒng),無須每次訪問一個應(yīng)用資源都登錄1次,大大提高了工作效率。這個模型與應(yīng)用系統(tǒng)無關(guān),應(yīng)用系統(tǒng)無須修改就可使用,具有高度擴(kuò)展性,同時,即使單點(diǎn)登錄系統(tǒng)失效,應(yīng)用系統(tǒng)仍可以正常使用,容錯性好。需要改進(jìn)的地方是,它沒有將存儲認(rèn)證信息的數(shù)據(jù)庫與其他應(yīng)用系統(tǒng)的數(shù)據(jù)庫同步起來。

      [1]朱 嬋.基于Kerberos票據(jù)的Web單點(diǎn)登錄設(shè)計[J].現(xiàn)代計算機(jī),2007(2):76-77.

      [2]STEVENS W R.TCP/IP詳解·卷3:TCP事務(wù)協(xié)議、HTTP、NNTP和UNIX域協(xié)議[M].北京:機(jī)械工業(yè)出版社,2002.

      [3]WILLISON.httpClient-a PHP Web Client Class[CP/OL].[2003-04-06].http://scripts.incutio.com/httpclient/index.php.

      猜你喜歡
      表單單點(diǎn)客戶端
      電子表單系統(tǒng)應(yīng)用分析
      華東科技(2021年9期)2021-09-23 02:15:24
      歷元間載波相位差分的GPS/BDS精密單點(diǎn)測速算法
      超薄異型坯連鑄機(jī)非平衡單點(diǎn)澆鑄實(shí)踐與分析
      山東冶金(2019年5期)2019-11-16 09:09:10
      縣級臺在突發(fā)事件報道中如何應(yīng)用手機(jī)客戶端
      傳媒評論(2018年4期)2018-06-27 08:20:24
      孵化垂直頻道:新聞客戶端新策略
      傳媒評論(2018年4期)2018-06-27 08:20:16
      基于Vanconnect的智能家居瘦客戶端的設(shè)計與實(shí)現(xiàn)
      電子測試(2018年10期)2018-06-26 05:53:34
      淺談網(wǎng)頁制作中表單的教學(xué)
      數(shù)字電視地面?zhèn)鬏斢脝晤l網(wǎng)與單點(diǎn)發(fā)射的效果比較
      16噸單點(diǎn)懸掛平衡軸的優(yōu)化設(shè)計
      客戶端空間數(shù)據(jù)緩存策略
      定边县| 旬邑县| 扎赉特旗| 昂仁县| 新丰县| 叙永县| 门源| 宜章县| 桦川县| 芒康县| 铁岭市| 阜新| 海原县| 含山县| 元氏县| 藁城市| 桓台县| 增城市| 芜湖市| 宣恩县| 鄂托克旗| 寿光市| 苏尼特右旗| 环江| 台北市| 泸溪县| 宜良县| 鲁山县| 临朐县| 如东县| 汉寿县| 山东| 南平市| 巩留县| 宁都县| 柳林县| 汉沽区| 平顶山市| 青冈县| 留坝县| 运城市|