PHP程序設(shè)計基礎(chǔ)(微課版)(第2版)課件 第7章 PHP 的 Ckie 和 Session技術(shù)_第1頁
PHP程序設(shè)計基礎(chǔ)(微課版)(第2版)課件 第7章 PHP 的 Ckie 和 Session技術(shù)_第2頁
PHP程序設(shè)計基礎(chǔ)(微課版)(第2版)課件 第7章 PHP 的 Ckie 和 Session技術(shù)_第3頁
PHP程序設(shè)計基礎(chǔ)(微課版)(第2版)課件 第7章 PHP 的 Ckie 和 Session技術(shù)_第4頁
PHP程序設(shè)計基礎(chǔ)(微課版)(第2版)課件 第7章 PHP 的 Ckie 和 Session技術(shù)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

7.1cookie技術(shù)陳學(xué)平CONTENTS1cookie技術(shù)1.1php中Cookie的功能和用途Cookie的功能Cookie應(yīng)用范圍Cookie有哪些用途呢?1.3php中如何讀取Cookie目錄011cookie技術(shù)021.1php中Cookie的功能和用途03Cookie的功能Cookie的功能Cookie是由服務(wù)器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內(nèi),下次請求同一網(wǎng)站時就發(fā)送該Cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。04Cookie應(yīng)用范圍Cookie應(yīng)用范圍Cookie常用于以下的3個方面:記錄訪客的某些信息。如可以利用Cookie記錄用戶訪問網(wǎng)頁的次數(shù),或者記錄方可曾經(jīng)輸入過的信息。另外,某些網(wǎng)站可以使用Cookie自動記錄訪客上次登錄的用戶名。在頁面之間傳遞變量。瀏覽器并不會保存當(dāng)前頁面上的任何變量信息,當(dāng)頁面被關(guān)閉時頁面上的所有變量信息將隨之消失。如果用戶聲明一個變量id=6,要把這個變量傳遞到另一個頁面,可以把變量id以Cookie形式保存下來,然后在下一頁通過讀取該Cookie來獲取該變量的值。將所查看的Internet頁存儲在Cookie臨時文件中,可以提高以后瀏覽的速度。Cookie應(yīng)用范圍注意:一般不要用Cookie保存數(shù)據(jù)集或其他大量的數(shù)據(jù)。并非所有的瀏覽器都支持Cookie,并且數(shù)據(jù)信息是以明文文本的形式保存在客戶端計算機中,因此最好不要保存敏感的、未加密的數(shù)據(jù),否則會影響網(wǎng)絡(luò)的安全性。05Cookie有哪些用途呢?Cookie有哪些用途呢?最根本的用途是Cookie能夠幫助Web站點保存有關(guān)訪問者的信息。Cookie的作用就類似于名片,它提供了相關(guān)的標(biāo)識信息,可以幫助應(yīng)用程序確定如何繼續(xù)執(zhí)行。使用Cookie能夠達(dá)到多種目的,所有這些目的都是為了使Web站點記住訪問信息。例如,一個實施民意測驗的站點可以簡單地利用Cookie作為布爾值,表示訪問的瀏覽器是否已經(jīng)參與了投票,從而避免重復(fù)投票;而那些要求用戶登錄的站點則可以通過Cookie來確定訪問者是否已經(jīng)登錄過,這樣就不必每次都輸入憑據(jù)。1.2php中如何創(chuàng)建CookieCookie的創(chuàng)建十分簡單,只要用戶的瀏覽器支持Cookie功能,就可以使用PHP內(nèi)建的函數(shù)來建立一個新的Cookie。在PHP中通過setcookie()函數(shù)創(chuàng)建Cookie。在創(chuàng)建Cookie之前必須了解的是,Cookie是HTTP頭標(biāo)的組成部分,而頭標(biāo)必須在頁面其他內(nèi)容之前發(fā)送,因此它必須最先輸出。所以即使是空格或者是空行,都不要在調(diào)用setcookie()函數(shù)之前輸出。若在setcookie()函數(shù)前輸出一個HTML標(biāo)記、echo語句,甚至一個空行都會導(dǎo)致程序出錯。其語法是如下的格式:1.2php中如何創(chuàng)建Cookiesetcookie()函數(shù)定義一個和其余的HTTP標(biāo)頭一起發(fā)送的Cookie,它的所有參數(shù)是對應(yīng)HTTP標(biāo)頭Cookie資料的屬性。setcookie()函數(shù)的導(dǎo)入?yún)?shù)看起來不少,但除了參數(shù)name,其他參數(shù)都是非必須的,而經(jīng)常使用的只有$name,$value和$expire這三個參數(shù)。setcookie()函數(shù)的參數(shù)說明如下:nameCookie的變量名可以通過$_COOKIE["cookiename"]調(diào)用變量名為cookiename的CookievalueCookie變量的值,該值保存在客戶端,不能用來保存敏感數(shù)據(jù)可以通過$_COOKIE["values"]獲取名為values的值expireCookie的失效時間,expire是標(biāo)準(zhǔn)的UNIX時間標(biāo)記,可以用time()函數(shù)或者mktime()函數(shù)獲取,單位為秒如果不設(shè)置Cookie的失效時間,那么Cookie將永遠(yuǎn)有效,除非手動將其刪除pathCookie在服務(wù)端的有效路徑如果該參數(shù)設(shè)置成“/”,則它在整個domain內(nèi)有效,如果設(shè)置為“/11”,它在domain下的/11目錄及子目錄內(nèi)有效。默認(rèn)是當(dāng)前目錄domainCookie有效地域名如果要使Cookie在域名下的所有子域名都有效,應(yīng)該設(shè)置為(6))secure指明Cookie是否通過安全的HTTPS,值為0或1如果值為1,則Cookie只能在HTTPS連接上有效;如果值為默認(rèn)值0,則Cookie在HTTP和HTTPS連接上均有效。如果只有$name這一個參數(shù),則原有此名稱的cookie選項將會被刪除,也可以使用空字符串來省略此參數(shù)。參數(shù)$expire和$secure是一個整數(shù),可以使用0來省略此參數(shù),而不是使用空字符串。但參數(shù)$expire是一個正規(guī)的UNIX時間整數(shù),由time()或者mktime()函數(shù)傳回。參數(shù)$secure指出此Cookie將只有在安全的HTTPS連接時傳送。domain使用setcookie()函數(shù)的全部參數(shù)設(shè)置,實例代碼如下的顯示說明:上例中表示建立一個識別名稱為“username”的Cookie,其內(nèi)容值為字符串“sky”,而在客戶端的存儲有效期為1小時。參數(shù)"/test"表示Cookie只有在故武器的這個子目錄或子目錄中有效。參數(shù)"."使Cookie能在如域名下的所有子域中都有效,雖然“.”并不是必需的,但加上它會兼容更多的瀏覽器。當(dāng)最后一個參數(shù)設(shè)為1時,則Cookie僅在安全的連接中才能被設(shè)置。使用setcookie()給的值只能是數(shù)字或者字符串,不能是其他的復(fù)雜結(jié)構(gòu)。061.3php中如何讀取Cookie1.3php中如何讀取Cookie如果Cookie設(shè)置成功,客戶端就擁有了Cookie文件,用來保存Web服務(wù)器為期設(shè)置的用戶信息。在客戶端使用了Windows系統(tǒng)去瀏覽服務(wù)器中的腳本,Cookie文件會被存放在“C:\DocumentsandSettings\用戶名\Cookies”文件夾下。從PHP5之后,任何從客戶端發(fā)送過來的Cookie信息,都會被自動保存在$_COOKIE全局?jǐn)?shù)組中,所以在每個PHP腳本中都可以從該數(shù)組中讀取相應(yīng)的Cookie信息。$_COOKIE全局?jǐn)?shù)組存儲所有通過HTTP傳遞的Cookie資料內(nèi)容,并以Cookie的識別名稱為索引值、內(nèi)容值為元素。1.3php中如何讀取Cookie在設(shè)置Cookie腳本中,第一次讀取它的信息并不會生效,必須刷新或到下一個頁面才可以看到Cookie值,因為Cookie要先被設(shè)置到客戶端,再次訪問時才能被發(fā)送過來,這是才能被獲取。所以要測試一個Cookie是否被成功設(shè)定,可以再其到期之前通過另外一個頁面來訪問其的值。在PHP中可以直接通過超全局變量數(shù)組$_COOKIE[]來讀取瀏覽器端的Cookie值。實例1使用$_COOKIE[]讀取瀏覽器端的Cookie實例代碼如下:代碼如下所示:1.3php中如何讀取Cookie在上面的代碼中,首先使用isset()函數(shù)檢測Cookie文件是否存在。如果不存在,則使用setcookie()函數(shù)創(chuàng)建一個Cookie,并輸出相應(yīng)的字符串;如果Cookie文件存在,則使用setcookie()函數(shù)設(shè)置文件失效的時間,并輸出用戶上次訪問網(wǎng)站的時間,最后在頁面輸出本次方位網(wǎng)站的當(dāng)前時間。首次運行實例時,由于沒有檢測到Cookie文件,運行結(jié)果如下所示:第一次訪問本次訪問的時間為:19-05-2721:48:58如果用戶在Cookie設(shè)置失效的時間(上面的實例為60秒)前刷新或者再次訪問該網(wǎng)頁,運行結(jié)果如下:1.3php中如何讀取Cookie上次訪問的時間為:19-05-2721:48:58本次訪問的時間為:19-05-2721:49:31注意:如果未設(shè)置Cookie失效的時間,則在關(guān)閉瀏覽器時自動刪除Cookie數(shù)據(jù)。如果為Cookie設(shè)置了失效的時間,瀏覽器將會記住Cookie數(shù)據(jù),即使重新啟動了計算機,只要沒有到期,再訪問網(wǎng)站時也會獲得訪問的數(shù)據(jù)信息。謝謝7.2PHPSession陳學(xué)平012Session2.1Session簡介Session是什么Session一般譯作會話,比方,在web應(yīng)用的用戶看來,他打開瀏覽器訪問一個電子商務(wù)站點,登錄、并完畢購物直到關(guān)閉瀏覽器,這是一個會話。2.1Session簡介Session的原理Session的基本原理是服務(wù)端為每個session維護一份會話信息數(shù)據(jù),而client和服務(wù)端依靠一個全局唯一的標(biāo)識(也就是sessionid)來訪問會話信息數(shù)據(jù)。用戶訪問web應(yīng)用時,服務(wù)端程序決定何時創(chuàng)建session。2.1Session簡介Sessionid的傳遞client和服務(wù)端之間的通信是通過sessionid建立聯(lián)系的,那么sessionid是怎樣傳遞的呢?用戶端與服務(wù)端的web通信協(xié)議是http協(xié)議。而通過http取得用戶數(shù)據(jù)慣用的三種方法各自是:POST方法、GET方法還有Cookie。而PHP默認(rèn)傳遞方法正是Cookie,也是最佳方法。僅僅有在client不支持Cookie的時候(比方:瀏覽器禁用了Cookie功能)才會通過GET或POST方法來傳遞sessionid,即通過在URL的query_string部分傳遞sessionid。不建議使用GET方法傳遞參數(shù),由于那樣容易泄露信息。2.1Session簡介2.2php中如何啟動Session會話Session的設(shè)置與Cookie不同,必須先行啟動,在PHP中必須調(diào)用session_start()函數(shù),以便讓PHP核心程序?qū)⒑蚐ession相關(guān)的內(nèi)建環(huán)境變量預(yù)先載入到內(nèi)存中。使用session_start()函數(shù)啟動會話,語法格式如下的形式:1session_start(void);//創(chuàng)建Session,開始一個會話,進行Session初始化session_start()這個函數(shù)沒有參數(shù),且返回值均為TURE。該函數(shù)有兩個主要的作用,儀式開始一個會話,而是返回已經(jīng)存在的會話。注意:通常,session_start()函數(shù)在頁面開始位置調(diào)用,然后會話變量被登錄到數(shù)據(jù)$_SESSION。7.2.3php中如何注冊和讀取Session會話2.1Session簡介注冊Session會話在php中使用Session變量,除了必須要啟動,還要經(jīng)過一個注冊的過程,注冊和讀取Session變量,都要通過訪問$_SESSION數(shù)組完成。必須在調(diào)用session_start()函數(shù)開啟Session之后才能使用。與$HTTP_SESSION_VARS不同,$_SESSION總是具有全局的范圍,因此不要對$_SESSION使用global關(guān)鍵字。在$_SESSION關(guān)聯(lián)數(shù)組中的鍵名具有和PHP中普通變量名相同的命名規(guī)則。會話變量被創(chuàng)建后,全部保存在數(shù)組$_SESSION中。通過數(shù)組$_SESSION創(chuàng)建一個會話變量很容易,只要直接給該數(shù)組添加一個元素就好了。比如如下的實例會啟動會話,創(chuàng)建一個Session變量并賦予一個空值,代碼是如下的:執(zhí)行腳本以后,Session變量就會被保存在服務(wù)器端的某一個文件夾中。2.1Session簡介實例2Session注冊會話實例代碼如下:上面的實例中Session注冊了兩個變量,如果在服務(wù)器中找到為該用戶保存Session變量的文件,打開后可以看到如下的內(nèi)容:username|s:6:"sky";uid|i:1:"1";//保存用戶Session中注冊的兩個變量的內(nèi)容2.1Session簡介讀取Session會話首先需要判斷會話變量是否有一個會話ID存在,如果不存在,就創(chuàng)建一個,并且使其能夠通過全局?jǐn)?shù)組$_SESSION進行訪問;如果已經(jīng)存在,則將這個已經(jīng)創(chuàng)建的會話變量載入以提供給用戶使用。例如:判斷存儲用戶名的Session會話變量是否為空,如果不為空,則將該會話變量賦予$my_value,其代碼顯示如下:實例3讀取Session會話實例代碼如下:下面給出一個完整的實例2.1Session簡介實例4session使用完整示例該實例由兩個頁面構(gòu)成實例代碼如下:session1.php<?phpif(isset($_POST['submit'])){session_start();//開始建立一個會話$_SESSION['season']=$_POST['season'];//存儲會話數(shù)據(jù)header("Location:session2.php");//應(yīng)特別注意header()里的格式問題2.1Session簡介實例4session使用完整示例}?><b>存儲會話</b><hr/>選擇需要設(shè)置的數(shù)據(jù):<formname="form1"method="post"action=""id="form1"><selectname="season"id="season_select"><optionvalue="春天">春天</option>2.1Session簡介實例4session使用完整示例<optionvalue="夏天">夏天</option><optionvalue="秋天">秋天</option><optionvalue="冬天">冬天</option></select><br/><br/><br/><inputtype="submit"name="submit"value="submit"/></form>2.1Session簡介實例4session使用完整示例SESSION2.PHP代碼如下session_start();//建立或者繼續(xù)一個會話$season=$_SESSION['season'];//讀取會話數(shù)據(jù)echo"<b>讀取會話</b><br/><br/>";switch($season){case'春天';echo'現(xiàn)在是綠意盎然的春天!';break;case'夏天';<?php2.1Session簡介實例4session使用完整示例echo'現(xiàn)在是熱情四溢的夏天!';case'秋天';echo'現(xiàn)在是豐收果實的秋天!';break;case'冬天';echo'現(xiàn)在是白雪皚皚的冬天!';break;default;echo'對不起,會話中沒有數(shù)據(jù)或者不存在該對話!';break;2.1Session簡介實例4session使用完整示例}?>測試一下效果如圖7-1、7-2所示。打開session1.php測試圖7-1存儲會話提交后結(jié)果2.1Session簡介實例4session使用完整示例圖7-2讀取會話7.2.4php中如何刪除和銷毀Session當(dāng)使用完一個Session變量后,可以將其刪除;當(dāng)完成一個會話以后,也可以將其銷毀。如果用戶想退出Web系統(tǒng),就需要為他提供一個注銷的功能,把他的所有信息在服務(wù)器中銷毀。2.1Session簡介實例4session使用完整示例刪除會話的主要有刪除單個會話、刪除多個會話和結(jié)束當(dāng)前會話有3種方式,下面就3種方式分別作一個簡單的介紹。2.1Session簡介刪除單個會話刪除單個會話即刪除單個會話的變量、同數(shù)組的操作一樣,直接注銷$_SESSION數(shù)組的某個元素即可。$_SESSION['user']變量,可以使用unset()函數(shù),代碼如下所示:注意:使用unset()函數(shù)時,要注意$_SESSION數(shù)組中元素不能省略,即不可以一次注銷整個數(shù)組,這樣會禁止整個會話的功能,如unset($_SESSION)函數(shù)會將全局變量$_SESSION銷毀,而且沒有辦法將其回復(fù),用戶也不能再注冊$_SESSION變量。如果要刪除多個或者全部會話,可采用下面的兩種方法。2.1Session簡介刪除多個會話如果想把某個用戶在Session中注冊的所有變量都刪除,也就是刪除多個會話即一次注銷所有的會話變量,可以通過將一個空的數(shù)組賦值給$_SESSION來實現(xiàn),其代碼顯示如下:2.1Session簡介結(jié)束當(dāng)前會話如果整個會話已經(jīng)結(jié)束,首先應(yīng)該注銷所有會話變量,然后使用session_destroy()函數(shù)清除結(jié)束當(dāng)前的會話,并清空會話中的所有資源,徹底銷毀Session,其代碼如下顯示:前面的講解可以總結(jié)出Session的刪除和注銷過程需要好幾個步驟。下面將通過一個實例,提供完整的代碼,運行該腳本后就可以關(guān)閉Session,并銷毀與本次會話有關(guān)的所有資源。徹底銷毀Session代碼如下所示:2.1Session簡介結(jié)束當(dāng)前會話注意:使用$_SESSION=array()清空$_SESSION數(shù)組的同時,也將這個用戶在服務(wù)器端對應(yīng)的Session文件內(nèi)容清空。而使用session_destroy()函數(shù)時,則是將這個用戶在服務(wù)器端對應(yīng)的Session文件刪除。謝謝7.3用戶會話登錄案例陳學(xué)平013用戶登錄案例實例5:使用cookie和session實現(xiàn)用戶登錄1.cookie小實例<?phpsetcookie("user","cxp",time()+3600);echo$_COOKIE["user"];?>說明:setcookie("user","cxp",time()+3600);設(shè)置一個用戶,并給它一個值cxpecho$_COOKIE["user"];輸出給定的值,測試效果如圖7-3所示。實例5:使用cookie和session實現(xiàn)用戶登錄圖7-3可以正常顯示下面介紹用戶登錄實例,其中會用到PHP7連接數(shù)據(jù)庫的方法。在第10章,會單獨介紹數(shù)據(jù)庫操作,本章初步介紹一下。用戶登錄功能分三個頁面來實現(xiàn)。登錄頁面login.html代碼如下:<html><head><title>Login</title><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><body><formname="form1"method="post"action="login.php">登錄頁面login.html<tablewidth="300"border="0"align="center"cellpadding="2"cellspacing="2"><tr><tdwidth="150"><divalign="right">用戶名:</div></td><tdwidth="150"><inputtype="text"name="username"></td></tr><tr><td><divalign="right">密碼:</div></td>登錄頁面login.html<td><inputtype="password"name="passcode"></td></tr><tr><td><divalign="right">Cookie保存時間:</div></td><td><selectname="cookie"id="cookie"><optionvalue="0"selected>瀏覽器進程</option><optionvalue="1">保存1天</option>登錄頁面login.html<optionvalue="2">保存30天</option><optionvalue="3">保存365天</option></select></td></tr></table><palign="center"><inputtype="submit"name="Submit"value="Submit"><inputtype="reset"name="Reset"value="Reset"></p>

</form>

</body>

</html>登錄檢測頁login.php代碼如下:<?phpheader("Content-Type:text/html;charset=GB2312");//該句代碼實現(xiàn)中文顯示,否則在有些時間會出現(xiàn)亂碼。$link=@mysqli_connect("localhost","root","root",'test')//選擇數(shù)據(jù)庫之前需要先連接數(shù)據(jù)庫服務(wù)器,注意PHP7中mysqli,不是mysql。在該句中實現(xiàn)本地服務(wù)器的連接,需要用正確的用戶名和密碼,連接服務(wù)器,同時連接數(shù)據(jù)庫testordie("數(shù)據(jù)庫服務(wù)器連接失敗");//如何失敗給出提示登錄檢測頁login.php//$conn=mysqli_connect($servername,$username,$password);//Checkconnectionif(!$link){die("連接失敗:".mysqli_connect_error());}//echo"連接成功";上面的代碼是判斷數(shù)據(jù)庫服務(wù)器是否連接成功,如果失敗則不會進入下一步。//exit;//獲取用戶輸入登錄檢測頁login.php$username=$_POST['username'];1$passcode=$_POST['passcode'];2$cookie=$_POST['cookie'];3//ECHO$username;4//exit;5//執(zhí)行SQL語句6//下面的語句同樣是用mysqli,不是用mysql,同時加入了$link,進行連接。7登錄檢測頁login.php$query=mysqli_query($link,"selectusername,userflagfromuserswhereusername='$username'andpasscode='$passcode'");//ordie("SQL語句執(zhí)行失敗");//判斷用戶是否存在,密碼是否正確if($row=mysqli_fetch_array($query)){if($row['userflag']==1or$row['userflag']==0)//判斷用戶權(quán)限信息是否有效登錄檢測頁login.php{switch($cookie)//根據(jù)用戶的選擇設(shè)置cookie保存時間{case0://保存Cookie為瀏覽器進程setcookie("username",$row['username']);break;case1://保存1天setcookie("username",$row['username'],time()+24*60*60);break;登錄檢測頁login.phpcase2://保存30天setcookie("username",$row['username'],time()+30*24*60*60);break;case3://保存365天setcookie("username",$row['username'],time()+365*24*60*60);break;}登錄檢測頁login.phpheader("location:main.php");//自動跳轉(zhuǎn)到main.php}else{echo"用戶權(quán)限信息不正確";}}else{else{echo"用戶名或密碼錯誤";}?>登錄成功驗證頁面代碼如下:<?phpheader("Content-Type:text/html;charset=GB2

溫馨提示

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

最新文檔

評論

0/150

提交評論