一、cookie
1>cookie介紹
Cookie是儲存在用戶端瀏覽器中的資料,可以通過Cookie來跟蹤與儲存使用者資料。一般情況下,Cookie通過HTTPheaders從服務端返回到用戶端。多數web程式都支援對Cookie的操作,因為Cookie是存在於HTTP的標題之中。
在PHP通過setcookie函數對Cookie進行設定,任何從瀏覽器發回的Cookie,PHP都會自動的將他儲存在
_COOKIE[‘key’]的形式來讀取某個Cookie值。
使用會話Session時通常使用Cookie來儲存會話id來識別使用者,Cookie具備有效期間,當有效期間結束之後,Cookie會自動的從用戶端刪除。
2>設定cookie
setcookie()
意義:用於設定cookie,在setcookie()函數中一個有7個參數(常用的參數只有5個)。
文法:setcookie(name,value,expire,path,domain,secure,httponly)
傳回值:如果在調用此函數之前存在輸出,則 setcookie()將失敗並返回FALSE。如果 setcookie()成功運行,它將返回TRUE。這並不表示使用者是否接受了Cookie。
參數:
name:
Cookie的名稱,通過$_COOKIE[‘name’]訪問。
value:
Cookie的值
expire:
Cookie到期的時間。這是一個Unix時間戳記,單位是秒。你可以用time()函數加上你希望它到期之前的秒數來設定它。或者你可以使用mktime()。如果設定為0或省略,則cookie將在會話結束時到期(當瀏覽器關閉時),預設為0。
path:
(有效路徑)如果路徑設定為’/’,則整個網站都有效,如果設定為 ‘/ foo /’,則cookie將僅在/foo/目錄和所有子目錄(如/ foo / bar / of)中可用domain。
domain:
(cookie可用的域)預設整個網域名稱都有效,要使cookie可用於整個域(包括它的所有子域),只需將該值設定為網域名稱(本例中為’example.com’)即可。
secure:
表示該cookie只能通過用戶端的安全HTTPS串連進行傳輸。設定TRUE時,只有存在安全連線時才會設定cookie。在伺服器端,程式員只能在安全連線上發送這種cookie(eg:相對於
value, time()+3600, “path/”, “baidu.com”); //設定路徑與域
3>Cookie的刪除與到期時間
在php中沒有指定刪除Cookie的函數,而是通過設定cookie的到期時間設定到目前時間之前,則該cookie會自動失效從而到達刪除該cookie。
4>判斷Cookie是否為空白
isset()
意義:判斷某一cookie是否存在。
文法:isset(對應的cookie屬性);
傳回值:true/false
setcookie("name","SYN");if( isset( $_COOKIE["name"])){ echo $_COOKIE["name"];}else{ echo "不存在";}
Session與cookie的異同
cookie:
1、將資料存放區在用戶端,建立起使用者與伺服器之間的聯絡,通常可以解決很多問題,但是cookie仍然具有一些局限:
2、cookie相對不是太安全,容易被盜用導致cookie欺騙
3、單個cookie的值最大隻能儲存4k
4、每次請求都要進行網路傳輸,佔用頻寬
session:
1、將使用者的會話資料存放區在服務端,沒有大小限制,
2、通過一個session_id進行使用者識別,PHP預設情況下session id是通過cookie來儲存的
//開始使用sessionsession_start();//設定一個session$_SESSION['test'] = time();//顯示當前的session_idecho "session_id:".session_id();echo "<br>";//讀取session值echo $_SESSION['test'];//銷毀一個sessionunset($_SESSION['test']);echo "<br>";var_dump($_SESSION);
二、Session
1>session使用
先執行session_start方法開啟session,然後通過全域變數$_SESSION進行session的讀寫。預設情況下,session是以檔案形式儲存在伺服器上的,因此當一個頁面開啟了session之後,會獨佔這個session檔案,這樣會導致目前使用者的其他並發訪問無法執行而等待。可以採用緩衝或者資料庫的形式儲存來解決這個問題。
session會自動的對要設定的值進行encode與decode,因此session可以支援任意資料類型,包括資料與對象等。
session_start();$_SESSION['ary'] = array('name' => 'jobs');$_SESSION['obj'] = new stdClass();var_dump($_SESSION);
2>刪除和銷毀session
unset()
在PHP用unset函數刪除某個session值,刪除後就會從全域變數$_SESSION中去除,無法訪問。
session_start();$_SESSION['name'] = 'jobs';unset($_SESSION['name']);echo $_SESSION['name']; //提示name不存在
session_destroy()
session_destroy函數會刪除所有資料,但是session_id仍然存在。
session_start();$_SESSION['name'] = 'jobs';$_SESSION['time'] = time();session_destroy();
特別注意:
session_destroy()並不會立即的銷毀全域變數
_SESSION才為空白,因此如果需要立即銷毀$_SESSION,可以使用unset()。
3>使用session來儲存使用者的登陸資訊
登入資訊既可以儲存在sessioin中,也可以儲存在cookie中,他們之間的差別在於session可以方便的存取多種資料類型,而cookie只支援字串類型,同時對於一些安全性比較高的資料,cookie需要進行格式化與加密儲存,而session儲存在服務端則安全性較高。
<?phpsession_start();//假設使用者登入成功獲得了以下使用者資料$userinfo = array( 'uid' => 1011, 'name' => 'spark', 'email' => '1637167XX@qq.com', 'sex' => 'F');header("content-type:text/html; charset=utf-8");/* 將使用者資訊儲存到session中 */$_SESSION['uid'] = $userinfo['uid'];$_SESSION['name'] = $userinfo['name'];$_SESSION['userinfo'] = $userinfo;//* 將使用者資料儲存到cookie中的一個簡單方法 */$str =serialize($userinfo); //將使用者資訊序列化setcookie('userinfo', $str);
瞭解更多關於序列化serialize;