




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、09 Cookie和Session的管理知識(shí)1 Cookie管理 Cookie是在HTTP協(xié)議下,服務(wù)器或腳本維護(hù)客戶機(jī)上信息的一種方式。有效地使用Cookie可以完成很多任務(wù),許多提供個(gè)人化服務(wù)的網(wǎng)站都是利用Cookie來(lái)區(qū)別不同用戶的。下面就詳細(xì)講述Cookie的相關(guān)知識(shí)。 1了解Cookie Cookie的中文意思是甜餅。Cookie其實(shí)就是一小段信息,它可以由腳本在客戶端機(jī)器上保存。從本質(zhì)上講,它是客戶的身份證。它不能作為代碼執(zhí)行,也不會(huì)傳遞病毒。簡(jiǎn)單地說(shuō),Cookie是Web服務(wù)器暫時(shí)存儲(chǔ)在用戶硬盤(pán)上的一個(gè)文本文件,并隨后被Web瀏覽器讀取。當(dāng)用戶再次訪問(wèn)Web網(wǎng)站時(shí),網(wǎng)站通過(guò)讀取C
2、ookie文件記錄這位訪客的特定信息(如上次訪問(wèn)的位置、花費(fèi)的時(shí)間、用戶名和密碼等),從而迅速作出響應(yīng),如再次訪問(wèn)相同網(wǎng)站時(shí)不需要輸入用戶名和密碼即可登錄等。 Web服務(wù)器可以利用Cookie來(lái)保存和維護(hù)很多與網(wǎng)站有關(guān)的信息。Cookie常用于3個(gè)方面: (1)記錄訪客的某些信息。如可以利用Cookie記錄用戶訪問(wèn)網(wǎng)頁(yè)的次數(shù),或者記錄訪客曾經(jīng)輸入過(guò)的信息,另外,某些網(wǎng)站可以使用Cookie自動(dòng)記錄訪客上次登錄的用戶名和密碼等信息。 (2)在網(wǎng)頁(yè)直接傳遞變量。瀏覽器并不會(huì)保存當(dāng)前頁(yè)面上的任何信息,當(dāng)頁(yè)面被關(guān)閉時(shí)頁(yè)面上的所有變量信息將隨之消失。而通過(guò)Cookie可以把需要在頁(yè)面間傳遞的變量先保存起
3、來(lái),然后到另一個(gè)頁(yè)面再讀取即可。 (3)將所存儲(chǔ)的Internet頁(yè)存儲(chǔ)在Cookie臨時(shí)文件夾中,可以提高以后瀏覽的速度。 2創(chuàng)建Cookie 在PHP中通過(guò)setcookie()函數(shù)創(chuàng)建Cookie。在創(chuàng)建Cookie之前必須了解的是,Cookie是HTTP頭標(biāo)的組成部分,而頭標(biāo)必須在頁(yè)面其他內(nèi)容之前發(fā)送,它必須最先輸出。這需要將函數(shù)的調(diào)用放到任何輸出之前,包括和標(biāo)簽以及任何空格。如果在調(diào)用setcookie()函數(shù)之前有任何輸出,本函數(shù)將失敗并返回False,如果setcookie()函數(shù)成功運(yùn)行,將返回True。setcookie()函數(shù)的語(yǔ)法格式如下: bool setcookie
4、( string $name , string $value , int $expire = 0 , string $path , string $domain , bool $secure = false ) setcookie()函數(shù)的參數(shù)說(shuō)明如表8-4所示。 例如: 運(yùn)行本實(shí)例,在Cookie文件夾下會(huì)自動(dòng)生成3個(gè)有效期不同的Cookie文件,在Cookie失效后,Cookie文件會(huì)自動(dòng)刪除。 注意:注意:當(dāng)用戶操作系統(tǒng)為Windows 2000/xp/2003,系統(tǒng)盤(pán)為C盤(pán)時(shí),Cookie文件默認(rèn)存放的目錄為“C:Documents and SettingsAdministratorC
5、ookies”。 3讀取Cookie 在PHP中可以直接通過(guò)超級(jí)全局?jǐn)?shù)組$_COOKIE來(lái)讀取瀏覽器端的Cookie值。例如: ?php / 輸出單獨(dú)的 Cookie echo $_COOKIEmyCookie2 . ; /另一個(gè)調(diào)試的方法就是輸出所有的 Cookie print_r($_COOKIE); ? 以上代碼輸出結(jié)果如下圖8-9所示。 4刪除Cookie 當(dāng)Cookie被創(chuàng)建后,如果沒(méi)有設(shè)置它的失效時(shí)間,其Cookie文件會(huì)在關(guān)閉瀏覽器時(shí)自動(dòng)刪除。如果要在關(guān)閉瀏覽器之前刪除Cookie文件,方法有兩種:一種是使用setcookie()函數(shù)刪除,另一種是在瀏覽器中手動(dòng)刪除Cookie。
6、下面分別進(jìn)行介紹。 (1)使用setcookie()函數(shù)刪除Cookie 刪除Cookie和創(chuàng)建Cookie的方式基本類似,也使用setcookie()函數(shù)。刪除Cookie只需要將setcookie()函數(shù)中的第二個(gè)參數(shù)設(shè)置為空值,將第三個(gè)參數(shù)Cookie的過(guò)期時(shí)間設(shè)置為小于系統(tǒng)的當(dāng)前時(shí)間即可。 例如,將Cookie的過(guò)期時(shí)間設(shè)置為當(dāng)前時(shí)間減1秒,代碼如下: setcookie(cookie_name , , time()-1); 在上面的代碼中,time()函數(shù)返回以秒表示的當(dāng)前時(shí)間戳,把過(guò)期時(shí)間減1秒就會(huì)得到過(guò)期的時(shí)間,從而刪除Cookie。當(dāng)然,如果把過(guò)期時(shí)間設(shè)置為0也可以刪除Cook
7、ie。 (2)在瀏覽器中手動(dòng)刪除Cookie 在使用Cookie時(shí),Cookie自動(dòng)生成一個(gè)文本文件存儲(chǔ)在IE瀏覽器的Cookies臨時(shí)文件夾中。在瀏覽器中刪除Cookie文件是非常快捷的。具體操作步驟如下: 啟動(dòng)IE瀏覽器,選擇“工具”/“Internet選項(xiàng)”命令,打開(kāi)“Internet選項(xiàng)”對(duì)話框。在“常規(guī)”選項(xiàng)卡中單擊“刪除Cookies”按鈕,將彈出“刪除Cookie”對(duì)話框,單擊“確定”按鈕,即可成功刪除全部Cookie文件。 5Cookie的生命周期 如果Cookie不設(shè)定過(guò)期時(shí)間,就表示它的生命周期為瀏覽器會(huì)話的時(shí)間,只要關(guān)閉IE瀏覽器,Cookie就會(huì)自動(dòng)消失。這種Cooki
8、e被稱為會(huì)話Cookie,會(huì)話Cookie是保存到內(nèi)存中的,一般不保存到硬盤(pán)中。 如果設(shè)置了過(guò)期時(shí)間,那么瀏覽器會(huì)把Cookie保存到硬盤(pán)中,再次打開(kāi)IE瀏覽器時(shí)會(huì)繼續(xù)有效,直到Cookie過(guò)期之后系統(tǒng)才會(huì)自動(dòng)刪除Cookie文件。 雖然Cookie可以長(zhǎng)期保存在客戶端瀏覽器中,但也不是一成不變的。因?yàn)闉g覽器最多允許存儲(chǔ)300個(gè)Cookie文件,而且每個(gè)Cookie文件支持最大容量為4KB。每個(gè)域名最多支持20個(gè)Cookie,如果達(dá)到限制時(shí),瀏覽器會(huì)自動(dòng)隨機(jī)地刪除Cookie文件。知識(shí)2 Session管理 前面提到的Cookie雖然可以在客戶端保存一定數(shù)量的會(huì)話狀態(tài),但是事實(shí)上全部采用Coo
9、kie來(lái)解決會(huì)話控制是不現(xiàn)實(shí)的,因?yàn)镃ookie本身的容量有限。因此這里提供另外一種解決方案,那就是只在客戶端保存一個(gè)會(huì)話標(biāo)志符,然后將會(huì)話數(shù)據(jù)都存儲(chǔ)在服務(wù)器上或者數(shù)據(jù)庫(kù)中。這種解決方案就是Session,下面就詳細(xì)講述Session的相關(guān)知識(shí)。 1了解Session (1)什么是Session Session譯為“會(huì)話”,其本義是指有始有終的一系列動(dòng)作/消息。在計(jì)算機(jī)專業(yè)術(shù)語(yǔ)中,Session是指一個(gè)終端用戶與交互系統(tǒng)進(jìn)行通信的時(shí)間間隔,通常指從注冊(cè)進(jìn)入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)過(guò)的時(shí)間。具體到Web中的Session指的就是用戶在瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過(guò)的這段時(shí)間,也就
10、是用戶瀏覽這個(gè)網(wǎng)站所花費(fèi)的時(shí)間。因此Session實(shí)際上是一個(gè)特定的時(shí)間概念,Session默認(rèn)的生命周期為20分鐘。 (2)為什么要使用Session 瀏覽器和服務(wù)器采用HTTP協(xié)議進(jìn)行通信,HTTP協(xié)議是無(wú)狀態(tài)的。用戶從瀏覽器向服務(wù)器發(fā)出的每個(gè)請(qǐng)求都獨(dú)立于它前面的請(qǐng)求。服務(wù)器無(wú)法知道兩個(gè)連續(xù)的請(qǐng)求是否來(lái)自同一個(gè)用戶,它所能做的就是返回當(dāng)前請(qǐng)求的頁(yè)面。為了在服務(wù)器保持客戶端的狀態(tài),就需要使用Session。 (3)Session的工作原理 Session的工作原理比較簡(jiǎn)單,當(dāng)客戶端訪問(wèn)服務(wù)器時(shí),服務(wù)器根據(jù)需要設(shè)置Session,將會(huì)話信息保存在服務(wù)器上,同時(shí)將唯一標(biāo)識(shí)Session的sess
11、ion_id傳遞到客戶端瀏覽器。瀏覽器將這個(gè)session_id保存在內(nèi)存中,這個(gè)session_id相當(dāng)于無(wú)過(guò)期時(shí)間的Cookie。以后瀏覽器每次請(qǐng)求都會(huì)額外加上這個(gè)session_id,在服務(wù)器根據(jù)這個(gè)session_id,就能取得客戶端的數(shù)據(jù)狀態(tài)。瀏覽器關(guān)閉后,這個(gè)Cookie就清掉了,它不會(huì)被存儲(chǔ)在用戶的Cookie臨時(shí)文件中。 如果客戶端瀏覽器意外關(guān)閉,服務(wù)器保存的Session數(shù)據(jù)不是立即釋放,此時(shí)數(shù)據(jù)還會(huì)存在,只要我們知道那個(gè)session_id,就可以繼續(xù)通過(guò)請(qǐng)求獲得此Session的信息。但是Session的保存有一個(gè)過(guò)期時(shí)間,一旦超過(guò)規(guī)定時(shí)間沒(méi)有客戶端請(qǐng)求時(shí),服務(wù)器就會(huì)清除
12、這個(gè)Session。 2創(chuàng)建和管理會(huì)話 創(chuàng)建一個(gè)會(huì)話主要包括啟動(dòng)會(huì)話、注冊(cè)會(huì)話、使用會(huì)話和刪除會(huì)話等步驟,下面分別介紹這些步驟。 (1)啟動(dòng)會(huì)話 啟動(dòng)會(huì)話的方式有兩種:一種是使用session_start()函數(shù),另一種是使用session_register()函數(shù)為會(huì)話登錄一個(gè)變量來(lái)隱含地啟動(dòng)會(huì)話。 session_start()函數(shù)創(chuàng)建會(huì)話的語(yǔ)法格式如下: bool session_start(void); 使用session_start()函數(shù)之前瀏覽器不能有任何輸出(包括和標(biāo)簽以及任何空格),否則會(huì)產(chǎn)生錯(cuò)誤,因此應(yīng)該把調(diào)用session_start()函數(shù)放在網(wǎng)頁(yè)代碼的頂端。 sess
13、ion_register()函數(shù)用來(lái)為會(huì)話登錄一個(gè)變量來(lái)隱含地啟動(dòng)會(huì)話,使用session_register()函數(shù)時(shí),不需要調(diào)用session_start()函數(shù),PHP會(huì)在注冊(cè)變量之后隱含地調(diào)用session_start()函數(shù)。 (2)注冊(cè)會(huì)話 會(huì)話變量被啟動(dòng)后,全部保存在數(shù)組$_SESSION中。通過(guò)數(shù)組$_SESSION創(chuàng)建一個(gè)會(huì)話變量很容易,只要直接給該數(shù)組添加一個(gè)元素即可。 例如,啟動(dòng)會(huì)話,創(chuàng)建一個(gè)Session變量并賦值,代碼如下: (3)使用會(huì)話使用會(huì)話變量很簡(jiǎn)單,首先需要判斷會(huì)話變量是否存在,如果不存在就創(chuàng)建它;如果存在就可以用數(shù)組$_SESSION訪問(wèn)該會(huì)話變量。例如:
14、(4)刪除會(huì)話 刪除會(huì)話主要有刪除單個(gè)會(huì)話、刪除多個(gè)會(huì)話和結(jié)束當(dāng)前會(huì)話3種。刪除單個(gè)會(huì)話變量同刪除數(shù)組元素一樣,直接注銷$_SESSION數(shù)組的某個(gè)元素即可。代碼如下: unset($_SESSIONuser); 在使用unset()函數(shù)時(shí),要注意$_SESSION數(shù)組中某元素不能省略,即不可一次注銷整個(gè)數(shù)組。這樣會(huì)禁止整個(gè)會(huì)話的功能,如unset($_SESSION)函數(shù)會(huì)將全局變量$_SESSION銷毀,而且沒(méi)有辦法恢復(fù),用戶也不能再注冊(cè)$_SESSION變量了。如果要?jiǎng)h除多個(gè)或者全部會(huì)話,可以采用下面的兩種方法。 如果想要一次注銷所有的會(huì)話變量,可以將一個(gè)空的數(shù)組賦值給$_SESSION
15、,代碼如下: $_SESSION=array(); 如果整個(gè)會(huì)話已經(jīng)基本結(jié)束了,首先應(yīng)該注意銷毀所有的會(huì)話變量,然后再使用session_destroy()函數(shù)清除并結(jié)束當(dāng)前會(huì)話,并清空會(huì)話中的所以資源,徹底銷毀Session,代碼如下: session_destroy(); 3會(huì)話應(yīng)用實(shí)例 (1)會(huì)話控制的簡(jiǎn)單應(yīng)用 這里制作了兩個(gè)簡(jiǎn)單的PHP頁(yè)面session1.php和session2.php來(lái)演示Session的應(yīng)用,session1.php的代碼如下: ?php session_start(); /啟動(dòng)Session echo 歡迎來(lái)到第1頁(yè); $_SESSIONuser = Jame
16、s; /設(shè)置Session $_SESSIONadmin = John; /設(shè)置Session $_SESSIONtime = time(); /設(shè)置Session echo 第2頁(yè); ? Session2.php的代碼如下: ?php session_start(); /啟動(dòng)Session echo 歡迎來(lái)到第2頁(yè); echo $_SESSIONuser.; / 輸出Session echo $_SESSIONadmin.; / 輸出Session echo date(Y m d H:i:s, $_SESSIONtime); ? session1.php運(yùn)行結(jié)果如圖8-10所示,點(diǎn)擊圖8-1
17、0中的“第2頁(yè)”超鏈接打開(kāi)session2.php,運(yùn)行結(jié)果如圖8-11所示。 (2)身份驗(yàn)證 身份驗(yàn)證是會(huì)話的一個(gè)重要功能。一旦用戶登錄成功后,就會(huì)通過(guò)會(huì)話id一直跟蹤用戶,并不需要用戶在每個(gè)頁(yè)面輸入身份驗(yàn)證信息。但是如果用戶登錄失敗,卻要嘗試登錄網(wǎng)站的其他頁(yè)面,則會(huì)提示沒(méi)有登錄,要求重新登錄。關(guān)于身份驗(yàn)證的應(yīng)用,將在實(shí)訓(xùn)中詳細(xì)講解。 (3)購(gòu)物車 購(gòu)物車也是會(huì)話的一個(gè)重要功能。通常人們?cè)谶M(jìn)行購(gòu)物的時(shí)候,總是選購(gòu)多樣物品,然后一次性支付。在挑選的時(shí)候,總是需要將商品臨時(shí)存放在一個(gè)購(gòu)物籃中,用戶可以方便地添加或者刪除商品。而這個(gè)購(gòu)物車的實(shí)現(xiàn),就是通過(guò)會(huì)話來(lái)進(jìn)行的。 實(shí)訓(xùn) 利用Session判斷用戶的訪問(wèn)權(quán)限 網(wǎng)站有些網(wǎng)頁(yè)可能不想讓沒(méi)有權(quán)限的用戶訪問(wèn),例如后臺(tái)管理頁(yè)面。這時(shí)可以利用Session判斷用戶的操作權(quán)限,來(lái)阻止沒(méi)有權(quán)限的用戶訪問(wèn)后臺(tái)管理頁(yè)面。具體可以通過(guò)會(huì)話(Session)變量來(lái)判斷用戶對(duì)網(wǎng)頁(yè)的訪問(wèn)權(quán)限。通常的做法是在用戶登錄時(shí)將用戶的用戶名和角色等信息存儲(chǔ)為會(huì)話變量(如$_SESSIONuser和$_SESSIONrole等)中,當(dāng)用戶訪問(wèn)其他非授權(quán)網(wǎng)頁(yè)時(shí)先檢查該會(huì)話變量是否存在,如果存在就可以訪問(wèn),否則就提示用戶登錄并跳轉(zhuǎn)到登錄頁(yè)面。 從圖8-14至8-16運(yùn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品配送端口管理制度
- 藥店個(gè)人健康管理制度
- 藥店店內(nèi)設(shè)備管理制度
- 獲準(zhǔn)返回住所管理制度
- 營(yíng)運(yùn)中心客服管理制度
- 設(shè)備內(nèi)部職責(zé)管理制度
- 設(shè)備安全用電管理制度
- 設(shè)備故障錄入管理制度
- 設(shè)備點(diǎn)檢環(huán)節(jié)管理制度
- 設(shè)備維修報(bào)價(jià)管理制度
- 高效化學(xué)滅菌技術(shù)-洞察及研究
- 融媒體保密管理制度
- 2025江蘇揚(yáng)州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試參考題庫(kù)附答案詳解
- 2025年河南高考真題化學(xué)試題含答案
- 陜西省榆林市2023-2024學(xué)年高二下學(xué)期期末質(zhì)量檢測(cè)政治試卷(含答案)
- 公司廉政紀(jì)律管理制度
- 2025年高考全國(guó)二卷數(shù)學(xué)高考真題解析 含參考答案
- 2025年普通高等學(xué)校招生全國(guó)統(tǒng)一考試數(shù)學(xué)試題(全國(guó)一卷)(有解析)
- 護(hù)士文職面試題及答案
- 解剖期末試題題庫(kù)及答案
- 保密知識(shí)競(jìng)賽試題及答案
評(píng)論
0/150
提交評(píng)論