资源描述
按一下以編輯母片標題樣式,*,按一下以編輯母片,第二層,第三層,第四層,第五層,第,10,章,交談期追蹤的Session與Cookies處理,10-1 PHP,的預定變數,10-2 HTTP,標頭處理,10-3,輸出緩衝區處理,10-4 Cookies,的處理,10-5 PHP,的交談期追蹤,10-6 Session,的處理,10-1 PHP的預定變數,10-1-1 PHP,的預定變數,10-1-2,伺服器系統資訊的內容,10-1-1 PHP的預定變數-,說明,PHP的預定變數屬於PHP,引擎建立的變數,,HTTP通訊協定傳送的不只,URL網址,,在HTTP標頭資訊擁有,瀏覽程式版本,、,伺服器,、,Cookie,、,表單欄位資料,等相關資訊,。,在PHP 4.10之後版本提供一組,結合陣列,的,預定變數,,可以,取得,PHP,程式,和,HTTP標頭,的相關資訊,預設擁有全域的變數範圍,稱為自動,全域,(Autoglobals)或超全域(Superglobals),變數,。,10-1-1 PHP的預定變數-,超,全域變數,10-1-2,伺服器系統,資訊的內容,-,變數名稱,10-1-2,伺服器系統資訊的內容,-,使用,在,PHP,程式可以,指定變數名稱,的鍵值來取得指定的系統資訊:,$,ip,=$_SERVER,REMOTE_ADDR,;,$path=$_SERVER,SCRIPT_NAME,;,PHP,程式可以使用,foreach,迴圈顯示伺服器的,所有變數值,:,foreach,($_SERVER as,$key,=,$value,),echo .,$key,.;,echo .,$value,.;,鍵值,10-2 HTTP,標頭處理,10-2-1 轉址到其他網頁或PHP程式,10-2-2,定時更新網頁,10-2-3,設定輸出文件內容的資料類型,10-2-4,設定在快取保留的期限,10-2 HTTP,標頭處理,PHP,的,header(),函數可以送出,HTML,文件的標頭資訊,透過送出的標頭資訊來,轉址或定時更新網頁,、指定文件內容和保留期限。,header(),函數的說明:,10-2-1,轉址到其他網頁或,PHP,程式,轉址功能是指在執行,PHP,程式時,可以轉址,到其他網址,或網站的其他網頁或,PHP,程式,,header(),函數是使用,Location,型態,來指定轉址的,URL,網址:,header(Location,:Ch10-1-2.php);,header(Location,:localhost/Ch09/Ch9-3-1.htm“);,header(Location,:,);,10-2-2,定時更新網頁,PHP,的,header(),函數可以使用,Refresh,型態指定,間隔時間來定時更新網頁,:,header(,Refresh,:2);,如果在,一定時間,後,轉址,到其他,URL,網址或,PHP,檔案路徑,只需加上,url,參數:,header(,Refresh:2,;,url=Ch10-1-2.php,);,間隔時間,此例是,2,秒,10-2-3,設定輸出文件內容的資料類型,-,說明,在,header(),函數可以使用,Content-type,型態,指定,HTTP,通訊協定傳送,資料到瀏覽程式的,資料種類,,其值是,MIME,資料類型,,常用類型:,10-2-3,設定輸出文件內容的資料類型,-,使用,如果需要,輸出,成,其他文件類型,,可以使用,header(),函數指定,MIME,資料類型:,header(Content,-type:,text/xml,);,XML,文件,10-2-4,設定在,快取保留的期限,-,說明,雖然網站的,PHP,程式、,HTML,網頁和圖片等多媒體資料是,儲存在,Web,伺服器,,不過為了,加速網頁存取,,在伺服端、客戶端電腦或,Proxy,伺服器都會將網頁內容,保留在快取空間(,Cache,)的資料夾或磁碟,,以便加速網頁的瀏覽。,10-2-4,設定在快取保留的期限,-,客戶端快取,的說明,在客戶端電腦啟動瀏覽程式瀏覽網頁時,網頁內容,同時會保留在客戶端電腦的資料夾,,此資料夾是一個快取空間,可以加速網頁瀏覽。,當使用者,重複瀏覽相同的網頁,時,瀏覽程式先到,快取,找找看,是否檔案已經存在,,如果有,就直接從快取取出網頁內容,而不是每次都連結網站下載網頁內容,如此,可節省下載檔案時間,,提高瀏覽效率。,不過,,為了保密、安全,原因或希望每次都連結網站下載網頁內容,我們並不希望將網頁內容保留在客戶端快取,或是,只允許保留一段時間,,所以,我們需要,設定,PHP,程式的保留期限,。,10-2-4,設定在快取保留的期限,-,指定,PHP,程式的,保留期限,PHP,程式可以使用,header(),函數指定,Expires,型態,設定網頁檔案在,快取保留的時間,,時間是,GMT,格林威治時間:,header(,Expires,:,.,gmdate,(D,d M Y,H:i:s,mktime,(0,0,0,12,31,2006).GMT);,程式碼使用,gmdate,(),函數取得,GMT,時間,,mktime,(),函數,指定日期,/,時間,,以此例是:,Sat,30 Dec 2006 16:00:00 GMT,。,如果,不想,將,PHP,程式,保留在快取,,只需將,Expires,設為,過去時間,即可:,header(Expires,:Mon,26 Jul,2004,05:00:00 GMT);,10-3,輸出緩衝區處理,10-3-1,為什麼使用輸出緩衝區,10-3-2,輸出緩衝區處理,10-3-1,為什麼使用輸出緩衝區,-,說明,PHP,的輸出緩衝區(,Output Buffer,)是用來儲存,PHP,程式的輸出結果,其目的是等到,執行完,PHP,程式,後,才,一次送到瀏覽程式顯示,。,在,PHP,程式使用輸出緩衝區,主要,是,針對使用,header(),或第,10-4,節的,setcookie,(),函數會更改,HTTP,標頭的情況,,避免產生重複寫入標頭資料的錯誤。,10-3-1,為什麼使用輸出緩衝區,-,圖例,例如:更改程式範例,Ch10-2-1.php,,,刪除第,1,列的,設定,不使用輸出緩衝區,輸出網頁內容,就可以測試,轉址,PHP,程式碼時產生的錯誤:,10-3-2,輸出緩衝區處理,-PHP,的輸出緩衝區處理,(,說明,),在,PHP,程式開啟輸出緩衝區可以在,php.ini,檔案,指定,output_buffering,屬性為,On,或是使用,PHP,的函數來開啟,,我們通常是使用,PHP,函數來開啟。,PHP,引擎在執行,PHP,程式碼時,可以選擇將處理的結果,馬上輸出,到客戶端的瀏覽程式顯示,或是先輸出到,暫放的輸出緩衝區,,等到,PHP,程式執行完或是緩衝區已滿,才送到瀏覽程式顯示。,10-3-2,輸出緩衝區處理,-PHP,的輸出緩衝區處理,(,圖例,),10-3-2,輸出緩衝區處理,-PHP,的輸出緩衝區處理,(,圖例說明,),PHP,程式是使用,ob_start,(),函數,開啟輸出緩衝區。,PHP,程式在送到,PHP,引擎執行後,可以,直接將輸出內容,送到瀏覽程式顯示,或是將輸出結果先,輸出到緩衝區,,當遇到下列情況才會將輸出的內容送到瀏覽程式,:,執行完,PHP,程式後。,執行到,ob_end_flush,(),、,ob_flush,(),函數,馬上將緩衝區的內容送出。,10-3-2,輸出緩衝區處理,-PHP,輸出緩衝區處理函數,PHP,提供輸出緩衝區控制函數可以,開啟,、,使用,和,關閉,使用輸出緩衝區,其相關函數的說明:,10-4,Cookies的處理,10-4-1 Cookies,的基礎,10-4-2,新增,Cookie,10-4-3,取得,Cookie,的內容,10-4-4,刪除,Cookie,10-4-5,陣列,Cookie,的使用,10-4-1 Cookies,的基礎,-,說明,在,Web,網站通常都需要保留一些,使用者的瀏覽記錄,,例如:使用者是否曾經瀏覽過網站,或是一些個人輸入的資訊或選擇。,Cookies,就是儲存這些資料的主要,解決方案之一,。,Cookies,的英文是,小餅乾,的意義,源於這些儲存在,客戶端,電腦的,檔案,尺寸都很小,,Cookies,並不是儲存在伺服器,而是儲存在瀏覽程式所在電腦,所以並不會浪費伺服器資源。,10-4-1 Cookies,的基礎,-HTTP,標頭的,Cookie,資料,(,格式,),伺服器回應客戶端請求的,HTTP,回應資料內就含有,HTTP,標頭資訊,,HTTP,標頭提供回應網頁檔案的重要資訊,內含多種欄位資料,每個欄位的格式:,field-,name:field_value,當,客戶端,向伺服器,提出請求,時,在,HTTP,回應資料的標頭就會將設定,Cookie,資料的欄位送到客戶端:,Set-,Cookie:name,=,value;expires,=,date;path,=,pname;domain,=,dname;secure,欄位名稱,欄位值,10-4-1 Cookies,的基礎,-HTTP,標頭的,Cookie,資料,(,屬性說明,),name,屬性,:,Cookie,的名稱,可以使用此名稱,取出,Cookie,值和,刪除,Cookie,。,expires,屬性,:,一個選項,,可有可無,,指定,Cookie,存在的,有效期限,,使用,GMT,的時間,其格式如下所示:,Weekday,DD-MM-YY HH:MM:SS GMT,domain,屬性,:伺服器的網域名稱,預設是建立,Cookie,的,伺服器網域名稱,。,path,屬性,:在,domain,屬性下的,路徑名稱,,,path,屬性可以進一步在同一個網站分辨是哪一個網頁所建立的,Cookies,。,secure,屬性,:如果指定此屬性,表示,Cookie,需要在,保密,情況下,才能在客戶端和伺服端,傳送,。,10-4-1 Cookies,的基礎,-,Cookie的,基本應用,個人資訊,:,使用,Cookies,保留個人資訊,例如:,姓名、地址、時區、帳號和是否曾經進過此網站的記錄,。,個人化,的內容:,Cookies,可以儲存個人化,網站外觀,和,個人偏好,的網站內容,或是提供使用者有興趣的資訊。,網站購物車,:,線上購物車需要保留,使用者選擇的商品,,,Cookies,就可以用來記錄選購的商品清單。,10-4-2,新增,Cookie-,語法,PHP,的,Cookie,是使用,setcookie,(),函數建立:,setcookie,(string name,string value,int,expire,string path,string domain,int,secure),Cookie,值,保留的客戶端的期限,其值是整數的,UNIX,時間刻記,10-4-2,新增,Cookie-,範例,在,PHP,程式建立,Cookie,主要使用,setcookie,(),函數的,前,3,個參數,:,setcookie(,Username,$name,$date,);,$date,是,Cookie,檔案儲存在客戶端電腦的有效期限,其日期計算的運算式:,$date=strtotime(+10 days,time();,Cookie,名稱,Cookie,值,時間刻記的整數值,10-4-3,取得,Cookie,的內容,客戶端電腦如果擁有,Cookie,,,PHP,程式可以使用,$_COOKIE,預定變數的,結合陣列取得,Cookie,值,:,$user=,$_,COOKIE,Username,;,$pass=,$_,COOKIE,Password,;,10-4-4,刪除,Cookie,如果客戶端的,Cookie,不再需要,,PHP,程式可以使用,setcookie,(),函數,刪除,Cookie,,刪除,Cookie,是將,expire,參數設為過期,:,setcookie(Username,time()-3600,);,設定為,1,個小時前,10-4-5,陣列,Cookie,的使用,-,建立,Cookie,儲存的資料也可以是結合陣列,在,PHP,程式取得,Cookie,後,同一個,Cookie,名稱下還可以使用,鍵值儲存多個值,:,setcookie(user,Name,陳會安,time()+3600);,setcookie(user,Username,Joe,time()+3600);,setcookie(user,Password,1234,time()+3600);,結合陣列有,3,個元素:,Name,、,Username,和,Password,,分別儲存使用者名稱、帳號和密碼,10-4-5,陣列,Cookie,的使用,-,取出,因為,Cookie,是一個陣列,在取得陣列,Cookie,的值時,可以使用,while,迴圈配合,list(),和,each(),函數,取得每一個鍵值的內容:,if(,isset($cookie,),while(,list($name,$value)=,each($cookie,),echo$name=$value;,10-5 PHP,的交談期追蹤,10-5-1 PHP,的,Session,基礎,10-5-2,交談期追蹤,10-5-1 PHP,的,Session,基礎,-,說明,若,PHP,程式啟動,Session,處理功能(,交談期處理功能,)。當使用者進入網站,,PHP,引擎就會,自動指定,Session ID,編號,建立一個新,Session,(交談期),,Session,(交談期)是指使用者,第一次進入網站,直到使用者離開網站為止的整個過程,。,Session,類似儲存在客戶端的,Cookie,,它可以在,伺服端,保留一些資源來,儲存,Session,變數,,,PHP,程式可以註冊不定數量的,Session,變數,,PHP,事實上是使用檔案來儲存這些,Session,變數。,10-5-1 PHP,的,Session,基礎,-,圖例,當這些變數註冊成為,Session,變數後,,所有,啟動,Session,處理功能的,PHP,程式都可以存取這些變數,。如果同時有,多位使用者,進入網站,因為每位使用者都會指定不同的,Session ID,編號,換句話說,,每個人都可以擁有專屬的,Session,變數,:,10-5-2,交談期追蹤,-,說明,交談期追蹤(,Session Tracking,)是一種機制,可以在一段時間內,讓網站維持一系列從,同一位使用者,提出(通常是指同一個瀏覽程式提出)請求的狀態保留機制,以便追蹤使用者的狀態。,交談期追蹤和,第,9,章的狀態管理十分相似,,不過第,9,章的狀態管理是指如何將一頁,PHP,程式的狀態傳遞到下一頁,PHP,程式的方法,交談期追蹤強調的是,使用者在整個,Session,交談期和跨過多頁,PHP,程式,HTTP,請求的狀態保留。,10-5-2,交談期追蹤,-,圖例,PHP,引擎實作交談期追蹤的方式是使用,Session,變數,,PHP,引擎指定每一位瀏覽網站的使用者一個,Session ID,編號來作為識別,使用者每一次的,HTTP,請求都需附上,Session ID,編號,,以便判斷是否是同一位使用者提出的請求:,10-6,Session的處理,10-6-1,註冊與存取,Session,變數,10-6-2,取消註冊,Session,變數與關閉,Session,10-6-3,使用,Session,變數傳遞資料,10-6-1,註冊與存取,Session,變數,-,函數,在,PHP,程式使用,Session,處理功能需要呼叫,session_start,(),函數,,以便讓,PHP,引擎將,Session,變數等相關資訊載入記憶體,其相關函數的說明如下表所示:,10-6-1,註冊與存取,Session,變數,-,使用,在,PHP,程式使用,Session,變數,需要先註冊,:,session_register(page_counter,);,在註冊成為,Session,變數後,,PHP,程式就可以使用,$_SESSION,結合陣列,的預定變數來,取得,指定的,Session,變數:,$_,SESSION,page_counter,+;,可以使用,session_id,(),函數取得使用者的,Session ID,:,使用者的,Session ID:,Session,變數,page_counter,加一,10-6-2,取消註冊,Session,變數與關閉,Session,PHP,提供,Session,相關處理函數可以,取消註冊,Session,變數與,關閉,Session,,其相關函數的說明,10-6-3,使用,Session,變數傳遞資料,-,建立,Session,變數,1,PHP,的,Session,變數可以在,網頁之間傳遞資料,,換句話說,我們可以使用,Session,變數取代表單欄位或,URL,參數來傳遞資料。例如:使用,Session,變數儲存使用者資訊,使用者,hueyan,的,Session,變數:,$_,SESSION,userName,=,hueyan,;,$_,SESSION,userPassword,=1234;,10-6-3,使用,Session,變數傳遞資料,-,建立,Session,變數,2,如果,另一位使用者,jane,也執行此,PHP,程式,伺服器也會替它建立一組,Session,變數:,$_,SESSIONuserName,=,jane,;,$_,SESSIONuserPassword,=5678;,10-6-3,使用,Session,變數傳遞資料,-,取得,Session,變數值,只要,PHP,程式啟動,Session,交談期,都可以,取得,上述,Session,變數值:,$name=,$_,SESSION,userName,;,$pass=,$_,SESSION,userPassword,;,
展开阅读全文