CGI編程的COOKIE技術應用_第1頁
CGI編程的COOKIE技術應用_第2頁
CGI編程的COOKIE技術應用_第3頁
CGI編程的COOKIE技術應用_第4頁
CGI編程的COOKIE技術應用_第5頁
已閱讀5頁,還剩5頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CGI 編程的 COOKIE 技術應用我們在一些留言本、 BBS 討論區發貼時常會出現這種現象:當進入發貼界面時在要求填寫用 戶名和密碼的地方就已經自動地填上了你的資料。這是什么會事呢?這是因為程序中引入了COOKIE 技術的緣故。原來在你第一次登錄時,程序就已在你的電腦中安裝了一個 COOKIE 信 息包,在你今后登陸時電腦就自動檢索你的 COOKIE 并取出信息包的信息供程序調用,所以出 現上面所述的現象。COOKIE 只不過是 CGI 程序要求瀏覽器持有的一個信息包,這個信息包可以由 CGI 程序在任何 時候收回。每當 CGI 程序要求創建 COOKIE 時, COOKIE 可以從服務器

2、傳送到瀏覽器所屬的子 目錄下 (通常是保存在 C:WINDOWSTemporary Internet Files 的目錄下, 這個過程稱為 COOKIE 的安裝。COOKIE 的安裝和讀出通常都由一個 CGI 模塊來完成,下面我就將此模塊的原代碼公布給大 家,有了這個 COOKIE 模塊我們在編寫程序時如要應用 COOKIE 技術可以說易如反掌。 cookie 的語法:http cookie 的發送是通過 http 頭部來實現的,他早于文件的傳遞,頭部 set-cookie 的語法如下: Set-cookie:name=name;expires=date;path=path;domain=do

3、main;secure name=name: 需要設置 cookie 的 值 (name 不 能 使 用 “; ”和 , 號 ), 有 多 個 name 值 時 用 ; 分 隔 例 如 : name1=name1;name2=name2;name3=name3 。expires=date: cookie 的有效期限 ,格式: expires=Wdy,DD-Mon-YYYY HH:MM:SS path=path: 設置 cookie 支持的路徑 ,如果 path 是一個路徑,則 cookie 對這個目錄下的所有文件及 子目錄生效, 例如: path=/cgi-bin/ ,如果 path 是一個文

4、件, 則 cookie 指對這個文件生效, 例如: path=/cgi-bin/cookie.cgi 。domain=domain: 對 cookie 生效的域名,例如: domain= secure: 如果給出此標志,表示 cookie 只能通過 SSL 協議的 https 服務器來傳遞。cookie 的接收是通過設置環境變量 HTTP_COOKIE 來實現的, CGI 程序可以通過檢索該變量獲 取 cookie 信息。以下是一個 cookie 的模塊,可以為你編寫程序帶來方便$Cookie_Exp_Date = ;# 此處設置 cookie 的有效時間$Cookie

5、_Path = ;# 此處設置 cookie 的有效路徑,默認腳本存在的目錄。$Cookie_Domain = ; # 此處設置 cookie 的有效域名,默認腳本調用的域名。 $Secure_Cookie = 0;Cookie_Encode_Chars = (%, +, ;, , =, &, :, s); %Cookie_Encode_Chars = (%, %25,+, %2B,;, %3B, %2C,=, %3D,&, %26,:, %3A%3A,s, +);# 特殊字符的解碼Cookie_Decode_Chars = (+, %3A%3A, %26, %3D, %2C, %3B, %2

6、B, %25); %Cookie_Decode_Chars = (+, ,%3A%3A, :,%26, &,%3D, =,%2C, ,%3B, ;,%2B, +,%25, %);# 特殊字符的解碼# 獲取 cookie 信息子程序 #sub GetCookies local(ReturnCookies) = _;local($cookie_flag) = 0; local($cookie,$value);if ($ENVHTTP_COOKIE) if ($ReturnCookies0 ne ) foreach (split(/; /,$ENVHTTP_COOKIE) # 分割 HTTP_COO

7、KIE 變量的字符串 ($cookie,$value) = split(/=/);foreach $char (Cookie_Decode_Chars) $cookie = s/$char/$Cookie_Decode_Chars$char/g;# 調用轉碼函數$value = s/$char/$Cookie_Decode_Chars$char/g;# 調用轉碼函數foreach $ReturnCookie (ReturnCookies) if ($ReturnCookie eq $cookie) $Cookies$cookie = $value;$cookie_flag = 1;else f

8、oreach (split(/; /,$ENVHTTP_COOKIE) ($cookie,$value) = split(/=/);foreach $char (Cookie_Decode_Chars) $cookie = s/$char/$Cookie_Decode_Chars$char/g;$value = s/$char/$Cookie_Decode_Chars$char/g;$Cookies$cookie = $value;$cookie_flag = 1;return $cookie_flag;# 設置 Cookie 信息子程序 #sub SetSecureCookie if ($_

9、0 = /a01$/) $Secure_Cookie = $_0;return 1;else return 0;sub SetCookies local(cookies) = _;local($cookie,$value,$char);while( ($cookie,$value) = cookies ) foreach $char (Cookie_Encode_Chars) $cookie = s/$char/$Cookie_Encode_Chars$char/g;# 調用轉碼函數 $value = s/$char/$Cookie_Encode_Chars$char/g;# 調用轉碼函數 p

10、rint Set-Cookie: . $cookie . = . $value . ;# 設置 cookie 值if ($Cookie_Exp_Date) print expires= . $Cookie_Exp_Date . ; # 設置有效時間 if ($Cookie_Path) print path= . $Cookie_Path . ; # 設置有效路徑 if ($Cookie_Domain) print domain= . $Cookie_Domain . ; # 設置有效域名 if ($Secure_Cookie) print secure; print n;shift(cooki

11、es); shift(cookies);sub SetCompressedCookies local($cookie_name,cookies) = _; local($cookie,$value,$cookie_value); while ( ($cookie,$value) = cookies ) foreach $char (Cookie_Encode_Chars) $cookie = s/$char/$Cookie_Encode_Chars$char/g; $value = s/$char/$Cookie_Encode_Chars$char/g; if ($cookie_value)

12、$cookie_value .= & . $cookie . : . $value; else $cookie_value = $cookie . : . $value; shift(cookies); shift(cookies); &SetCookies($cookie_name,$cookie_value);sub GetCompressedCookies local($cookie_name,ReturnCookies) = _; local($cookie_flag) = 0;local($ReturnCookie,$cookie,$value);if (&GetCookies($c

13、ookie_name) if ($ReturnCookies0 ne ) foreach (split(/&/,$Cookies$cookie_name) ($cookie,$value) = split(/:/);foreach $char (Cookie_Decode_Chars) $cookie = s/$char/$Cookie_Decode_Chars$char/g; $value = s/$char/$Cookie_Decode_Chars$char/g;foreach $ReturnCookie (ReturnCookies) if ($ReturnCookie eq $cook

14、ie) $Cookies$cookie = $value;$cookie_flag = 1;else foreach (split(/&/,$Cookies$cookie_name) ($cookie,$value) = split(/:/);foreach $char (Cookie_Decode_Chars) $cookie = s/$char/$Cookie_Decode_Chars$char/g; $value = s/$char/$Cookie_Decode_Chars$char/g;$Cookies$cookie = $value;$cookie_flag = 1;delete($

15、Cookies$cookie_name);return $cookie_flag;#結束 # 下面是 cookie 信息包安裝代碼段!- HIDEexpireDate = new Date;if (expireDate.getYear() 0) begin = dc.indexOf(cname);if (begin != -1) begin += cname.length;end = dc.indexOf(;, begin);if (end = -1) end = dc.length;return dc.substring(begin, end); return null;/ STOP HID

16、ING FROM OTHER BROWSERS -#結束 #下面是讀取信息包代碼,很簡單:&GetCookies;$name=$Cookiesusername;$pass=$Cookiespassword;本站用的“ BBS 討論區”程序和本人寫的“會員管理”程序就采用了此模塊。 思維稿MY SQ數據庫的使用方法現在網上有很多交互式的程序如BBS留言本等都使用 PHP來編寫,而PHP是支持MYSQL數據庫的,因此很多人在用PHP編程時都使用MYSQL數據庫。最近有一個網友送給我一份用PHP+MYSQ編寫的留言本程序,在這里我將在調試此程序的體會講一下(重點是MYSQ1數據庫部分),希望能對喜歡

17、 PHP+MYSQ的朋友提供有用的參考。此程序由 4 個文件組成,一個是顯示貼子的子程序,一個是貼子輸入程序,一個是產生框架結構頁面的 HTM文件,一個是數據庫結構文本文件。要使用此程序,你的空間必須要支持PHP和 MYSQI數據庫,我現在使用的空間是由WWW.51.NET所提供的滿足上述要求。安裝此程序的第一步是要安裝程序所用的數據庫,要成功生成一個數據庫你必須要知道你的MYSQL服務器的主機名、密碼、和在MYSQL服務器中分配給你使用的數據庫目錄名,這些參數都由ISP商提供給你,然后用文本編輯器編寫一個數據庫結構的一般文本文件,格式如下:設你的主機名是:localhost ;密碼是:123

18、45 ;用戶名:gzdzw;數據庫目錄名: test# 數據表的結構表 catvCREATETABLE catv(id in t(11)主目錄 i+. mysql + test歡迎使用 phpMyAdmin 2.1.0MySQL 3.2330-gamma 運行干 localhotNOT NULL逮立一個新的數據庫改檔auto_ in cre丨建立1ment,mail-顯示MySQL的運行信息文檔varchar(60顯示MySQL 系統變量文檔顯示進程文檔),重起MySQL 文檔home phpMyAdrmin-Homepagevarchar(60),content phpMyAdmin 文檔t

19、ext,reply text,aaa varchar(20),ip varchar(255), replydate varchar(255), date varchar(255),n ame varchar(IO),PRIMARY KEY (id);接著用phpMyAdmin程序(此程序是一個專門針對MYSQ1數據庫而編寫的 PHP程序,它可對MYSQL數據庫進行包括:數據庫的生成、數據庫結構的修改、字段的修改、數據的刪除、數據庫結構和 數據的導岀和導入等操作,是使用MYSQL勺必備工具程序。此程序在網上有很多網站都提供免費 下載。)下面講一講此程序的設置:找到此程序下的文件:con fig.

20、i nc.php ,修改其中的你的主機名$cfgServers1host = localhost; /$cfgServers1port= ”;端口設置,空為默認值可不作修改$cfgServers1adv_auth = false; /岀錯處理,false是默認值可不修改。$cfgServers1stduse門=root; / MYSQL $cfgServers1stdpass = ; / MYSQL $cfgServers1use門=gzdzw; / MySQL $cfgServers1password = 12345; / MySQL默認用戶名默認用戶密碼(一般為空)指定使用者的用戶名指定使

21、用者的密碼$cfgServers1 on ly_db = test; / $cfgServers1verbose = ; / 然后修改 require(english.inc.php); 將顯示中文。修改完畢后,將整個程序用指定使用的數據庫目錄名指定使用的數據庫名為 require(chinese_gb.inc.php);FTP軟件上傳到你的使用空間,然后運行這時程序運行時in dex.php 岀現上圖的界面,雙擊左上角的數據庫目錄名(分配給你的數據庫目錄名),會岀現下圖的界面,此時點選“瀏覽”按鈕選取你的庫結構文件,然后按“開始”按鈕這時程序就自動地將數據庫結構導入到MYSQI數據庫中并產生

22、一個名為CATV的數據庫文件了, 0K此時你就可以調試你的程序了。那末如何在本地機上調試 MYSQ的程序呢?很簡單只要安裝一個 MYSQ服務器軟件(在 網上有下載),再將phpMyAdmin的config.inc.php 文件修改一下就萬事大吉了。 本站的站務 論壇”就是應用了 MYSQI數據庫技術編寫的。 思維稿主目錄bl mysqlN columnsprivi dbH host3i tables_priv3 userjni-iraiHnin+ test!數據庫test數據表執行操作記錄caiv 瀏覽選擇插入屬性丟棄清空 1在下面指定的數據庫中運行呂QL語旬館戲文檔文本文件的位置:|瀏覽|開

23、始|查詢模板查看數據庫的結構和摘要信息。介只選擇結構廠添加擊叩tableH開始|結構和數據廠笈送廠-曹立:個新的數據表與數據庫怕吐名宇字段:開始|丟棄數據庫test S檔SMT服務器軟件的設置UHADR(Adva need Direct Remailer)是一套專門發送郵件的軟件,它能夠更快、更安全、簡便地發送郵件,通過它不僅能節省金錢,還能節省時間。ADR的主要功能是在我們自己的微機上建立一個本地SMTP服務器,在發送郵件時使用自身的SMTP端口而不需使用ISP提供的發信服務器,ADR通過DNS解析收件人的地址把郵件直接快速地發送到對方的郵件服務器上。在此 期間,由于不受ISP提供的SMTP

24、服務器是否擁擠的影響,而且幾乎不用轉發服務器,所以郵件 發送更加快速、更加安全,而不會造成丟信的現象,更不會因為SMTP服務器的關閉而影響郵件的發送。對于經常使用E mail的廣大網友來說,不失為一種絕好的選擇。下面,將ADR的使用方法詳細介紹給大家。一、軟件的下載和安裝我們可以到 http:/www6.o nli ne.l n.c n/soft/in ternet/server/上下載該軟件,其最新的1.6版大小為880KB,也可以到華軍軟件園(http: II 上下載。下載后得到一個 壓縮文檔 Adr.zip ,把這個軟件包解壓到任一目錄,執行其中的 Setup

25、.exe 即可順利安裝。該軟 件是一款共享軟件,不注冊可以有 15 天的使用期限。二、軟件的使用軟件安裝完畢后,會在“程序”組中生成 Advanced Direct Remailer 項,在桌面上生成快 捷圖標。雙擊快捷圖標執行程序后,軟件會退至任務欄托盤內,形成一個藍色箭頭狀的小圖標。 右擊這個圖標,會彈出一個菜單,程序提供的各種功能可以在這個菜單中進行調用。1 . ADR的設置:在右擊圖標彈出的菜單中選擇“ General Settings ”,彈出設置窗口,在設置窗口中共有八 個標簽,下面我們分別予以介紹:General :在這個標簽頁中共有八個復選框:“ Run program whe

26、n Windows startup ”, 如果選中,則表示軟件將隨系統同時啟動;“ Show Monitor window always topmost ”,如果選 中此項,則軟件的窗口始終在桌面的最上方,不被其他窗口覆蓋;“ Delete messages after sending,dont move it inSent” ,這個選項如果被選中,則發送的郵件信息將被直接刪除,而不是放到 Sent文件夾中;“ Integrationwith Eserv”,建議選中這個選項,因為Eserv網站是一個集郵件服務器、新聞服務器、代理服務器、Web服務器于一身的服務器,把這個選項選中,軟件將會更好地

27、運行;“ Beep when message is moved inBad” ,當發送出現錯誤并把郵件轉移到 Bad文件夾中時發聲;Beep when all mail will be sent,當發送所有郵件時發聲(這里提到的發聲是通過聲卡的外接喇叭發聲,而不是通過計算機的小喇叭);“ Use message priority in Outbox queue ”,如果把此項選中,則在發送郵件時,將首先發送標識為 高優先級的郵件;而最后一項“ Use delay list ”則是過濾垃圾郵件之用。在這幾個選項中,我 們可以根據自己的情況靈活選用。Actions :在這個標簽頁中設置郵件的發送情

28、況。在“ Start delivery ”中有三個單選按 鈕:Manually throught program menU表示通過手工發送郵件;When dial up connection is established ”表示通過指定的連接進行發送,而如果此時連接的名稱設定為“Anyconnection ”,則表示只要連接到互聯網上就會發送郵件;“ Automaticallywhen mail presentin Outbox ”是給使用專線之類長期在線的用戶設置的,自動發送郵件。在“ Purge old mail ” 中有兩個選項:“ In Sent box after several l

29、ast days”表示如果在Sent box (待發信箱)中信件存放超過指定天數, 則將其刪除, 默認是 15;“In Bad box after several last days” 就表示在Bad Box中的信息存放到指定天數時將其刪除。 DNS ADR需要指定DNS(即域名服務器),它需要通過DNS解析收件人的郵件地址。這個DNS服務器地址,我們可以向ISP詢問,也可以在軟件運行時連入互聯網,在這個頁面內的“Windows DNS setting ”下有顯示,按顯示順序順次填入Primary DNS”(主控DNS、“Secondary DNS(輔助 DNS中。在該頁面內還有兩個復選框,一

30、個是Try to deliver by name to host,if host was not found in DNS ,默認狀態下是選中該項,不用更改。第二個 選項是“ Dont use internal DNS cache ,這個選項不要選中。因為在發送郵件時,如果不使 用DNScache,則會在每次發送時都要通過DNS進行搜索,即使是向同一個郵件服務器發送郵件也是如此,而如果使用DNScache,則在向相同的郵件服務器發送郵件時只須DNS解析一次即可,這樣能夠提高發信速度。 Proxy: ADR支持Socks5代理服務器,如果我們是通過代理服務器接入互聯網,就可以在 這個頁面里把代理

31、服務器的地址填入,否則不要進行設置。對于其他幾個標簽頁,如 Logs 、 Mailbox 等不用設置,軟件即可正常工作。2. 郵件軟件的設置ADR運行之后,我們自己的微機上就已經開通了一個SMTP服務器,所以在發郵件時再也不用通過ISP提供的SMTP服務器了,那么在收發郵件的軟件中該如何進行設置呢?在Outlook Express 5.0中,我們可以選擇主菜單上的工具”乍賬號”,選擇郵件” 標簽,選中郵件名稱,按下“屬性”按鈕,選擇“服務器”標簽,在“外發郵件(SMTP ”中輸入“ localhost ”,也就是本機地址,或者填入 ,按下“確定”即可。在FoxMail中,選

32、擇主菜單上的“賬戶屬性”,選擇“郵件服務器”,在“發送郵件服務器”中填入“ localhost ”。如果是在局域網中,則需要查詢一下安裝ADR軟件的IP地址(局域網內地址),然后把其他機器郵件軟件的發送郵件服務器地址填為這個地址即可。3郵件的發送把ADR和郵件軟件設置好后,我們就可以通過我們自己的機器向外直接發送郵件了。和以前一樣,在OE或者FoxMail中撰寫好一封郵件,然后按下發送按鈕,我們就會看到郵件非??焖?地被發送出去。但郵件真的被發到了對方的郵件服務器上了嗎?不是,郵件首先被發送到ADR構造的SMTP服務器上,此時我們需要右擊托盤內的圖標,選擇“Open Monitor ”查看一下

33、。在 Monitor 界面上我們可以看到三個標簽, 一個稱為“ OutBox”, 一個是“ Sent”, 另一個 是“ Bad。我們在郵件軟件中發送的郵件被送到OutBox中待發。如果我們在前面設置時把ADR設置為手工發送郵件。在這里可以按下“發送”快捷按鈕(黑三角形)進行真正的發送郵件, 選擇主菜單上的“ Delivery ”“ Run Delivery ”也可以完成這個功能。發送時,在下面的提示行 內會有一個藍色的進度指示條表示郵件發送的進度,當待發郵件全部發送出去后,OutBox 將會被清空。如果在發送中途想中止或停止發送,可以按下“暫?!卑粹o或“終止”按鈕。發送郵件也可以不打開 Mon

34、itor 程序,而直接右擊托盤內的圖標,選擇“ Run Delivery ”進 行發送,選擇“ Pause Delivery ”暫停,選擇“ Stop Delivery ”終止發送。由于這款軟件不經過ISP提供的SMTP服務器,所以發信速度很快,尤其是發送大郵件時更加明顯。同時,經過 ADR發送的郵件直接傳輸到對方的郵件服務器上,我們在郵件發岀后, 對方可以馬上收到, 幾乎不存在延遲現象。 但由于它是一款英文軟件, 對于一般網友來說在使用過程 中稍有困難,好在它的操作、設置都非常簡單。CGI聊天室程序的剖析一般用 CGI 編寫的聊天程序其頁面結構均為框架式結構,通常分為四個框架:聊天區、 在線

35、人員名單顯示區、 發言區、 其他項目附加區。 這些區都顯示由 CGI 程序所生成的四個不同的 頁面。一、發言區發言區其實是一個普通表單頁面,根據功能的多少可設置多個參數,如發言者的表情、 字體顏色、悄悄話、發言內容、發言者的姓名等,每一個功能都有一個對應的變量,這些變量通 過提交按鈕傳給服務器端的 CGI 程序進行處理。另外,在此區內還可設置一些必要的管理功能,如聊天區的清屏、人員管制(如踢人功能)等功 能。這些功能的提交方式一般是用超連接方式進行, 即運行 CGI 程序的相應模塊來完成相應的操 作。二、在線人員名單顯示區此區主要是顯示在線聊天的人員名單,進入聊天室的人員首先需通過一個入口表單,填 入如姓名、密碼、性別等參數,然后提交到 CGI 程序,程序就會將此人的這些資料寫入到一個在 線人員記錄文件中,然后利用vMETA HTTP-EQUIV=REFRESH CONTENT=12;URL天主程序?job=運行參數 這條語句對此文件進行定時讀取和寫入(定時時間可自定) ,并將讀取的數據顯示在“在線人員名單顯示區”內同時程序還定時地對在線人員是否離線進行檢測,如某人已離線, 程序將清除此人在人員記錄數據文件中

溫馨提示

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

評論

0/150

提交評論