PHP程序設(shè)計(jì)基礎(chǔ)(微課版)(第2版)課件 2.PHP SESSION會(huì)話(huà)_第1頁(yè)
PHP程序設(shè)計(jì)基礎(chǔ)(微課版)(第2版)課件 2.PHP SESSION會(huì)話(huà)_第2頁(yè)
PHP程序設(shè)計(jì)基礎(chǔ)(微課版)(第2版)課件 2.PHP SESSION會(huì)話(huà)_第3頁(yè)
PHP程序設(shè)計(jì)基礎(chǔ)(微課版)(第2版)課件 2.PHP SESSION會(huì)話(huà)_第4頁(yè)
PHP程序設(shè)計(jì)基礎(chǔ)(微課版)(第2版)課件 2.PHP SESSION會(huì)話(huà)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

7.2PHPSession陳學(xué)平012Session2.1Session簡(jiǎn)介Session是什么Session一般譯作會(huì)話(huà),比方,在web應(yīng)用的用戶(hù)看來(lái),他打開(kāi)瀏覽器訪(fǎng)問(wèn)一個(gè)電子商務(wù)站點(diǎn),登錄、并完畢購(gòu)物直到關(guān)閉瀏覽器,這是一個(gè)會(huì)話(huà)。2.1Session簡(jiǎn)介Session的原理Session的基本原理是服務(wù)端為每個(gè)session維護(hù)一份會(huì)話(huà)信息數(shù)據(jù),而client和服務(wù)端依靠一個(gè)全局唯一的標(biāo)識(shí)(也就是sessionid)來(lái)訪(fǎng)問(wèn)會(huì)話(huà)信息數(shù)據(jù)。用戶(hù)訪(fǎng)問(wèn)web應(yīng)用時(shí),服務(wù)端程序決定何時(shí)創(chuàng)建session。2.1Session簡(jiǎn)介Sessionid的傳遞client和服務(wù)端之間的通信是通過(guò)sessionid建立聯(lián)系的,那么sessionid是怎樣傳遞的呢?用戶(hù)端與服務(wù)端的web通信協(xié)議是http協(xié)議。而通過(guò)http取得用戶(hù)數(shù)據(jù)慣用的三種方法各自是:POST方法、GET方法還有Cookie。而PHP默認(rèn)傳遞方法正是Cookie,也是最佳方法。僅僅有在client不支持Cookie的時(shí)候(比方:瀏覽器禁用了Cookie功能)才會(huì)通過(guò)GET或POST方法來(lái)傳遞sessionid,即通過(guò)在URL的query_string部分傳遞sessionid。不建議使用GET方法傳遞參數(shù),由于那樣容易泄露信息。2.1Session簡(jiǎn)介2.2php中如何啟動(dòng)Session會(huì)話(huà)Session的設(shè)置與Cookie不同,必須先行啟動(dòng),在PHP中必須調(diào)用session_start()函數(shù),以便讓PHP核心程序?qū)⒑蚐ession相關(guān)的內(nèi)建環(huán)境變量預(yù)先載入到內(nèi)存中。使用session_start()函數(shù)啟動(dòng)會(huì)話(huà),語(yǔ)法格式如下的形式:1session_start(void);//創(chuàng)建Session,開(kāi)始一個(gè)會(huì)話(huà),進(jìn)行Session初始化session_start()這個(gè)函數(shù)沒(méi)有參數(shù),且返回值均為T(mén)URE。該函數(shù)有兩個(gè)主要的作用,儀式開(kāi)始一個(gè)會(huì)話(huà),而是返回已經(jīng)存在的會(huì)話(huà)。注意:通常,session_start()函數(shù)在頁(yè)面開(kāi)始位置調(diào)用,然后會(huì)話(huà)變量被登錄到數(shù)據(jù)$_SESSION。7.2.3php中如何注冊(cè)和讀取Session會(huì)話(huà)2.1Session簡(jiǎn)介注冊(cè)Session會(huì)話(huà)在php中使用Session變量,除了必須要啟動(dòng),還要經(jīng)過(guò)一個(gè)注冊(cè)的過(guò)程,注冊(cè)和讀取Session變量,都要通過(guò)訪(fǎng)問(wèn)$_SESSION數(shù)組完成。必須在調(diào)用session_start()函數(shù)開(kāi)啟Session之后才能使用。與$HTTP_SESSION_VARS不同,$_SESSION總是具有全局的范圍,因此不要對(duì)$_SESSION使用global關(guān)鍵字。在$_SESSION關(guān)聯(lián)數(shù)組中的鍵名具有和PHP中普通變量名相同的命名規(guī)則。會(huì)話(huà)變量被創(chuàng)建后,全部保存在數(shù)組$_SESSION中。通過(guò)數(shù)組$_SESSION創(chuàng)建一個(gè)會(huì)話(huà)變量很容易,只要直接給該數(shù)組添加一個(gè)元素就好了。比如如下的實(shí)例會(huì)啟動(dòng)會(huì)話(huà),創(chuàng)建一個(gè)Session變量并賦予一個(gè)空值,代碼是如下的:執(zhí)行腳本以后,Session變量就會(huì)被保存在服務(wù)器端的某一個(gè)文件夾中。2.1Session簡(jiǎn)介實(shí)例2Session注冊(cè)會(huì)話(huà)實(shí)例代碼如下:上面的實(shí)例中Session注冊(cè)了兩個(gè)變量,如果在服務(wù)器中找到為該用戶(hù)保存Session變量的文件,打開(kāi)后可以看到如下的內(nèi)容:username|s:6:"sky";uid|i:1:"1";//保存用戶(hù)Session中注冊(cè)的兩個(gè)變量的內(nèi)容2.1Session簡(jiǎn)介讀取Session會(huì)話(huà)首先需要判斷會(huì)話(huà)變量是否有一個(gè)會(huì)話(huà)ID存在,如果不存在,就創(chuàng)建一個(gè),并且使其能夠通過(guò)全局?jǐn)?shù)組$_SESSION進(jìn)行訪(fǎng)問(wèn);如果已經(jīng)存在,則將這個(gè)已經(jīng)創(chuàng)建的會(huì)話(huà)變量載入以提供給用戶(hù)使用。例如:判斷存儲(chǔ)用戶(hù)名的Session會(huì)話(huà)變量是否為空,如果不為空,則將該會(huì)話(huà)變量賦予$my_value,其代碼顯示如下:實(shí)例3讀取Session會(huì)話(huà)實(shí)例代碼如下:下面給出一個(gè)完整的實(shí)例2.1Session簡(jiǎn)介實(shí)例4session使用完整示例該實(shí)例由兩個(gè)頁(yè)面構(gòu)成實(shí)例代碼如下:session1.php<?phpif(isset($_POST['submit'])){session_start();//開(kāi)始建立一個(gè)會(huì)話(huà)$_SESSION['season']=$_POST['season'];//存儲(chǔ)會(huì)話(huà)數(shù)據(jù)header("Location:session2.php");//應(yīng)特別注意header()里的格式問(wèn)題2.1Session簡(jiǎn)介實(shí)例4session使用完整示例}?><b>存儲(chǔ)會(huì)話(huà)</b><hr/>選擇需要設(shè)置的數(shù)據(jù):<formname="form1"method="post"action=""id="form1"><selectname="season"id="season_select"><optionvalue="春天">春天</option>2.1Session簡(jiǎn)介實(shí)例4session使用完整示例<optionvalue="夏天">夏天</option><optionvalue="秋天">秋天</option><optionvalue="冬天">冬天</option></select><br/><br/><br/><inputtype="submit"name="submit"value="submit"/></form>2.1Session簡(jiǎn)介實(shí)例4session使用完整示例SESSION2.PHP代碼如下session_start();//建立或者繼續(xù)一個(gè)會(huì)話(huà)$season=$_SESSION['season'];//讀取會(huì)話(huà)數(shù)據(jù)echo"<b>讀取會(huì)話(huà)</b><br/><br/>";switch($season){case'春天';echo'現(xiàn)在是綠意盎然的春天!';break;case'夏天';<?php2.1Session簡(jiǎn)介實(shí)例4session使用完整示例echo'現(xiàn)在是熱情四溢的夏天!';case'秋天';echo'現(xiàn)在是豐收果實(shí)的秋天!';break;case'冬天';echo'現(xiàn)在是白雪皚皚的冬天!';break;default;echo'對(duì)不起,會(huì)話(huà)中沒(méi)有數(shù)據(jù)或者不存在該對(duì)話(huà)!';break;2.1Session簡(jiǎn)介實(shí)例4session使用完整示例}?>測(cè)試一下效果如圖7-1、7-2所示。打開(kāi)session1.php測(cè)試圖7-1存儲(chǔ)會(huì)話(huà)提交后結(jié)果2.1Session簡(jiǎn)介實(shí)例4session使用完整示例圖7-2讀取會(huì)話(huà)7.2.4php中如何刪除和銷(xiāo)毀Session當(dāng)使用完一個(gè)Session變量后,可以將其刪除;當(dāng)完成一個(gè)會(huì)話(huà)以后,也可以將其銷(xiāo)毀。如果用戶(hù)想退出Web系統(tǒng),就需要為他提供一個(gè)注銷(xiāo)的功能,把他的所有信息在服務(wù)器中銷(xiāo)毀。2.1Session簡(jiǎn)介實(shí)例4session使用完整示例刪除會(huì)話(huà)的主要有刪除單個(gè)會(huì)話(huà)、刪除多個(gè)會(huì)話(huà)和結(jié)束當(dāng)前會(huì)話(huà)有3種方式,下面就3種方式分別作一個(gè)簡(jiǎn)單的介紹。2.1Session簡(jiǎn)介刪除單個(gè)會(huì)話(huà)刪除單個(gè)會(huì)話(huà)即刪除單個(gè)會(huì)話(huà)的變量、同數(shù)組的操作一樣,直接注銷(xiāo)$_SESSION數(shù)組的某個(gè)元素即可。$_SESSION['user']變量,可以使用unset()函數(shù),代碼如下所示:注意:使用unset()函數(shù)時(shí),要注意$_SESSION數(shù)組中元素不能省略,即不可以一次注銷(xiāo)整個(gè)數(shù)組,這樣會(huì)禁止整個(gè)會(huì)話(huà)的功能,如unset($_SESSION)函數(shù)會(huì)將全局變量$_SESSION銷(xiāo)毀,而且沒(méi)有辦法將其回復(fù),用戶(hù)也不能再注冊(cè)$_SESSION變量。如果要?jiǎng)h除多個(gè)或者全部會(huì)話(huà),可采用下面的兩種方法。2.1Session簡(jiǎn)介刪除多個(gè)會(huì)話(huà)如果想把某個(gè)用戶(hù)在Session中注冊(cè)的所有變量都刪除,也就是刪除多個(gè)會(huì)話(huà)即一次注銷(xiāo)所有的會(huì)話(huà)變量,可以通過(guò)將一個(gè)空的數(shù)組賦值給$_SESSION來(lái)實(shí)現(xiàn),其代碼顯示如下:2.1Session簡(jiǎn)介結(jié)束當(dāng)前會(huì)話(huà)如果整個(gè)會(huì)話(huà)已經(jīng)結(jié)束,首先應(yīng)該注銷(xiāo)所有會(huì)話(huà)變量,然后使用session_destroy()函數(shù)清除結(jié)束當(dāng)前的會(huì)話(huà),并清空會(huì)話(huà)中的所有資源,徹底銷(xiāo)毀Session,其代碼如下顯示:前面的講解可以總結(jié)出Session的刪除和注銷(xiāo)過(guò)程需要好幾個(gè)步驟。下面將通過(guò)一個(gè)實(shí)例,提供完整的代碼,運(yùn)行該腳本后就可以關(guān)閉Se

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論