PHP的會話控制
阿新 • • 發佈:2018-12-15
頁面資料的作用域:
當前頁共享資料:變數、常量
兩個頁面間傳遞資料: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>";