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