1. 程式人生 > >PHP的會話控制

PHP的會話控制

頁面資料的作用域:

當前頁共享資料:變數、常量

兩個頁面間傳遞資料:get,post

跟蹤使用者的多頁面資料共享(會話):session、cookie

全域性資料共享:檔案、資料庫、memcached

 

Cookie:

資料儲存在瀏覽器檔案中

資料通過請求頭攜帶資訊(Cookie:)進行頁面cookie資料傳遞

基本使用:

 1 //設定cookie 引數(鍵,值,時間)
 2 //時間不寫或者為0,則會儲存至關閉瀏覽器程式
 3 //時間其他值為xx秒
 4 setcookie("dong","dongxiaodong");
 5 //儲存一天,時間引數:當前時間戳+24小時*60分*60秒
6 setcookie("xiao1","wa wa wa",time()+24*60*60); 7 //陣列資料 8 //獲取:echo $_COOKIE["dong"]["d1"]; 9 //陣列鍵若留空,不可自動增長 10 setcookie("dong[d1]","dong11111"); 11 12 //若cookie為第一次設定,則不可在當前頁得到值 13 //以下為下一頁內容 14 //----------------------------- 15 //列印所有 16 print_r($_COOKIE); 17 18 echo $_COOKIE["xiao1"]; 19 echo $_COOKIE
["dong"]["d1"]; 20 21 //刪除cookie 22 //當前頁第一次設定不可使用,時間小於當前時間則過期無效 23 setcookie("dong","",time()-10);

 

Session:

資料預設儲存在伺服器檔案中

基本使用:

 1 //開啟session
 2 //將會向客戶端傳送一個sessionID,儲存在客戶端cookie中
 3 session_start();
 4 
 5 //得到sessionID的鍵
 6 echo session_name();
 7 //得到sessionID的值
 8 //echo session_id();
 9 
10
//儲存資料 11 $_SESSION["dong"]="dongxiaodong123"; 12 //可在當前頁獲取資料 13 echo $_SESSION["dong"]; 14 15 //清除某個資料 16 unset($_SESSION["dong"]); 17 //清除所有資料 18 $_SESSION=array(); 19 20 //銷燬session,刪除伺服器儲存的session檔案 21 session_destroy(); 22 23 //自動儲存的sessionID 24 //以下為下一頁內容 25 //--------------------------------------------- 26 //得到本地儲存的sessionID 27 //echo $_COOKIE["PHPSESSID"];

伺服器中Session儲存位置:

內容檢視:

 

解決客戶端瀏覽器禁用Cookie

當客戶端瀏覽器禁用cookie後伺服器在客戶端對應cookie中沒有儲存sessionID,所以當客戶端頁面重新整理或者跳轉時會重新生成session資料,即每次都會產生不同的sessionID,所以其資料可認為不能被共享。

解決方法是使用常量SID判斷客戶端的cookie是否被禁用,而自動匹配資料傳遞

起始頁程式碼:

1 session_start();
2 $_SESSION["dong"]="dongxiaodong1233";
3 //頁面跳轉攜帶使用SID可動態更加客戶端有沒有設定禁止cookie傳遞引數
4 echo "<a href='wan11.php?".SID."'>tiaotiao</a>";

第二頁:

1 //手動設定sessionID
2 //cookie被禁用時使用get傳遞sessionID時使用
3 if(!empty($_GET[session_name()])){
4 //設定sessionID
5 session_id($_GET[session_name()]);
6 }
7 session_start();
8 //獲取sessionID對應的資料
9 echo $_SESSION["dong"];

 

使用memcache對session進行高效快取:

第一步:管理員執行cmd,開啟memcache伺服器

 

第二步:設定儲存方式為memcache

第三步:設定連線地址

第四步:

 重啟web伺服器,即可常規使用session即可 

 

JSON資料的編碼與解碼:

編碼json:$字串名=json_encode($陣列名);

解碼json1:$物件=json_decode($json字串);訪問為$物件->原陣列下標

解碼json2:$陣列=json_decode($json字串,true);訪問為$陣列[‘陣列下標’]

 

頁面跳轉:

 1 //立即跳轉
 2 //header("Location:main.php");
 3 //echo '<script>location="main.php"</script>';
 4 
 5 //3秒後跳轉
 6 //echo '<script>setTimeout(\'location="main.php"\',3000)</script>';
 7 
 8 
 9 //提示後跳轉
10 echo "<script>alert('確定跳轉頁面');window.location.href='main.php';</script>";