PHP基本整理3
會話控制(cookie和session)
簡介
Cookie是存儲在客戶端瀏覽器中的數(shù)據(jù),我們通過Cookie來追蹤與存儲用戶數(shù)據(jù)。一般情況下,Cookie通過HTTP headers從服務(wù)器端返回到客戶端。session是將用戶的會話數(shù)據(jù)存儲在服務(wù)端,沒有大小限制,通過一個session_id進行用戶識別,PHP默認情況下session id是通過cookie來保存的,因此從某種程度上來說,seesion依賴于cookie。但這不是絕對的,session id也可以通過參數(shù)來實現(xiàn),只要能將session id傳遞到服務(wù)端進行識別的機制都可以使用session。
PHP通過setcookie函數(shù)進行Cookie的設(shè)置,任何從瀏覽器發(fā)回的Cookie,PHP都會自動的將他存儲在$_COOKIE的全局變量之中,因此我們可以通過$_COOKIE['key']的形式來讀取某個Cookie值。
Cookie經(jīng)常用來: 存儲用戶的登陸信息,購物車等,且在使用會話Session時通常使用Cookie來存儲會話id來識別用戶,Cookie具備有效期,有效期結(jié)束之后,會自動從客戶端刪除。
設(shè)置Cookie
PHP中設(shè)置Cookie的最常用方法是使用setcookie函數(shù):
setcookie(name,value,expire,path,domain);
- name:Cookie名,可以通過$_COOKIE['name']進行訪問
- value:Cookie的值
- expire:過期時間,默認為零,表示瀏覽器關(guān)閉即失效
- path:如果路徑設(shè)置為'/',則整個網(wǎng)站都有效。如果設(shè)置成'/path',那么就只在/path及其子路徑/path/demo等下有效,根目錄下就都不到cookie的值
- domain:默認整個域名都有效
示例代碼:
$value = 'test'; setcookie("TestCookie",$value); setcookie("TestCookie",$value,time()+3600); setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //設(shè)置路徑與域tip:如果是刪除cookie,只需要把expire設(shè)置成當(dāng)前時間之前,cookie就自動失效了,這樣設(shè)計是為了簡化http頭。
setcookie("TestCookie",'',time()-1);
占坑:php設(shè)置cookie還有用setrawcookie和header直接設(shè)置兩種方法
使用session
- 首先執(zhí)行session_start方法開啟session,然后用全局變量$_SESSION進行session的讀寫
- session會自動對要設(shè)置的值進行encode和decode,因此session可以支持任意數(shù)據(jù)類型,數(shù)組和對象都是可以的。
- 刪除session的方法是unset函數(shù),刪除后session就會從$_SESSION中去除,無法再訪問。如果調(diào)用session_destroy,會刪除掉所有數(shù)據(jù),但是session_id仍然存在,而且這種刪除是下次訪問的時候$_SESSION才為空,如果要立即刪除$_SESSION,就使用unset。
tip:可以用session存儲多種類型的數(shù)據(jù),故用session存儲用戶登陸信息,購物車數(shù)據(jù)等很好。和cookie對比的話,cookie需要進行格式化和加密存儲,session存儲在服務(wù)器端很安全。還有,cookie只支持字符串類型。
看一個實例做個簡單了解,加密解密函數(shù)不太懂,將就看一下。
(碼一下,讀一遍手冊之后再來自行補充)
PHP異常處理
PHP支持異常處理,異常處理是面向?qū)ο笠粋€重要特性,PHP代碼中的異常通過throw拋出,異常拋出之后,后面的代碼將不會再被執(zhí)行。異常拋出被用于在遇到未知錯誤,或者不符合預(yù)先設(shè)定的條件時,通知客戶程序,以便進行其他相關(guān)處理,不至于使程序直接報錯中斷。
異常處理類
PHP有較多異常處理類,其中Exception是所有異常處理的基類。Exception具有幾個基本屬性和方法:
- message 異常消息內(nèi)容
- code 異常代碼
- file 拋出異常的文件名
- line 拋出異常在該文件的行數(shù)
常用方法有:
- getTrace 獲取異常追蹤信息
- getTraceAsString 獲取異常追蹤信息的字符串
- getMessage 獲取出錯信息
也可以自己繼承Exception來建立自定義異常處理類
看一下代碼示例就理解了:
tip:碼一下,未完待續(xù)
數(shù)據(jù)庫操作
安裝插件的話主流數(shù)據(jù)庫基本都支持。LAMP用的是MySQL和PHP嘛,所以PHP和MySQL是好基友,簡單了解一下PHP操作MySQL
直接碼函數(shù)就行了,大部分操作插入刪除什么的得會一些基本的MySQL的語句,可以回顧一下MySQL的整理.
<?php /** header();* 這一行規(guī)定html的編碼方式*/header("Content-type:text/html;charset=utf-8"); /******** mysqli_connect* 作用:建立數(shù)據(jù)庫的連接* 參數(shù):ip地址,數(shù)據(jù)庫用戶名,密碼* 返回值:1.連接成功時返回mysql鏈接標(biāo)識符* 2.連接失敗返回false*******/if($con=mysqli_connect('localhost','root','')){echo 'success 成功'.'<br>';}else{echo 'fail'.'<br>';}/******* mysqli_select_db()* 作用:選擇數(shù)據(jù)庫* 參數(shù):mysql鏈接標(biāo)識符,數(shù)據(jù)庫名* 返回值:1.成功返回true* 2.返回失敗false******/if(mysqli_select_db($con,'test')){echo 'yes<br>ok';}else{echo 'no';} /******** mysqli_query()* 作用:執(zhí)行sql命令* 參數(shù):mysql鏈接標(biāo)識符,sql命令* 規(guī)定傳輸數(shù)據(jù)的類型* 返回值:1.insert情況下,成功true* 2.insert情況下,失敗false* 3.select情況下,執(zhí)行成功返回資源標(biāo)識符,即返回的信息地址*******/mysqli_query($con,'set names utf8');mysqli_query($con,$sql);$query = mysqli_query($con,'select * from test');mysqli_fetch_row($con,$query);//讀取一行,以數(shù)組形式返回出來,前一條讀到最后了的話,再次執(zhí)行返回空//返回的是一個以為索引數(shù)組,每一個下標(biāo)與數(shù)據(jù)庫里的字段排序相對應(yīng)//全讀出的寫法,用個whilewhile($row=mysqli_fetch_row($query)){print_r($row);} /*********mysqli_error* 作用:返回上一個MySQ操作產(chǎn)生的文本錯誤信息* 參數(shù):(可選mysql標(biāo)識符)* 返回值:文本錯誤信息********/echo mysqli_error(); /********* mysqli_close();* 作用:關(guān)閉數(shù)據(jù)庫* 參數(shù):********/mysqli_close($con); ?>轉(zhuǎn)載于:https://www.cnblogs.com/ustc-rjgc2017/p/8183789.html
總結(jié)
- 上一篇: python 装饰函数
- 下一篇: 【网络流24题】魔术球问题(最大流)