SESSION與COOKIE區別:
Session 將資訊儲存在伺服器上.伺服器在接受到唯一的SESSION_ID後,根據這個ID擷取相關資料,然後將資訊傳遞到用戶端(瀏覽器).
Cookie 是將所有資訊以文本的形式存在本地檔案,並由用戶端(瀏覽器)進行管理與維護.
因為Session 資料存放區在server端,所以遠程client無法對資料進行修改;而Cookie儲存在client本地,容易被擷取和篡改.所以Session安全性較高.
SESSION 介紹:
PHP5 後session被設定為全域變數,可以通過 $_SESSION[session_id] 來擷取.當頁面啟動SESSION會話,會在伺服器中產生一個帶唯一id的SESSION,這個SESSION在生命週期結束前一直有效.當關閉網頁或結束生命週期後,session會在伺服器中自動登出.
建立一個session 會話需要經過一下4個步驟:
a)啟動會話..
方法有2種: bool session_star(); boolean session_register(string name);
b)註冊回話.
會話變數被啟動後,全部保全在$_SESSION數組當中.通過數組$_SESSION建立一個會話變數很簡單,只需要給該數組添加一個變數即可.
c)使用會話:
一般操作:判斷對應session_id的SESSION是否存在.不存在建立一個,存在 則通過 $_SESSION[session_id] 使用.
d)刪除會話.
unset($_SESSION[session_id]);//刪除單個.
unset([$_SESSION]);//刪除整個,將禁止整個會話功能,切無法恢複.
$__SESSION=array();//刪除整個,可恢複.
session_destroy();//結束當前會話..
SESSION的生命週期:
1.控制session 生命週期的方法:
一. 前提條件:用戶端支援COOKIE!
方法:
a>通過Session來完成.
void session_set_cookie_params(int lifetime[,string path][,string domain][,bool secure]);
bool setcookie(string name [,string value] [,int expire] [,string path] [,sting domain] [,secure]);
b>通過Cookie 來完成.
二. 前提條件:用戶端不支援COOKIE!
一旦用戶端不支援cookie,SESSION就不能在頁面間傳遞,解決辦法:
a>.在登陸前提示使用者開啟cookie.
b>.表單POST/GET方式,來傳遞SESSION_ID.
c>.設定php.ini檔案中的session.use_trans_sid=1 或編譯時間開啟-enable-trans-sid;
d>.通過檔案或資料庫方式傳遞SESSION_ID;
伺服器上對SESSION效能最佳化:
在伺服器中,如果將所有使用者的session都儲存到臨時目錄中,會降低伺服器的安全性與效率.
解決方案:將SESSION儲存到伺服器上的資料庫或者臨時檔案中.
臨時檔案:
string session_save_path(string path);
資料庫:
session 儲存在臨時檔案時,當網站瀏覽量很大的時候,將會導致查詢Session的效率很低,推薦資料庫儲存形式.
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc);//將session_id 儲存與資料庫中的函數.
SESSION 緩衝:
緩衝即將頁面中的某些資訊儲存到用戶端指定的檔案夾中,且可以設定一定的有效時間.(已經經過第一次訪問,且儲存)在這個有效時間內,當再次訪問頁面,則可直接從緩衝中讀取內容,從而提高頁面瀏覽效率.
string session_cache_limiter(string cache_limiter); //緩衝函數.
int session_cache_expire([int new cache_expire]); //有效時間.
COOKIE介紹:
cookie 是一種遠程用戶端儲存資料和跟蹤識別使用者的機制.是伺服器臨時存放資料在本機使用者的一個文字檔.文字檔格式:"使用者名稱@網站地址[數字].txt"
COOKIE 常見功能:
a)記錄訪客的某些資訊. b)在頁面間傳遞變數; c)將頁面內容儲存到cookie中提高下次訪問速度.
慎用COOKIE:
a)不是所有的瀏覽器都支援cookie.
b)資料是以明文的方式儲存在本地,不適合敏感的資訊,未加密的資訊.
c)不同類型瀏覽器對cookie 檔案有大小,個數限制:比如最多隻能存300個cookie 檔案,每個大小不超過4KB,每個網域名稱最多支援20個cookie檔案.如果超過顯示,會隨機刪除.
建立COOKIE:
bool setcookie(string name [,string value] [,int expire] [,string path] [,sting domain] [,secure]);
讀取COOKIE:
$_COOKIE[];
刪除COOKIE:
a). setcookie("id", "",time()-1);//值為空白,有效時間小於目前時間.0為直接刪除COOKIE.
b).手動刪除.在用戶端找到臨時存放cookie的檔案.
setcookie()函數後,要執行重新整理,cookie才能取得資料:
個人理解是因為session 跟cookie都是在client 跟server之間傳輸,在頁面顯示前,我們就必須擷取到相應的資料.所以一般是在擷取 http:// 或https://時必須帶上session 或cookie..當在執行setcookie()時,僅僅在本機存放區了cookie 但是地址上並沒有帶上cookie..因而需要重新整理,讓伺服器給地址協議帶上cookie發送個用戶端,這樣才能取得到值..
正是以上session_star(),setcookie()前,html頁面不能有輸出...所以說cookie 或者session認第一,就沒人敢認第二.