會話控制技術session 和cookie
HTTP是無狀態協議,沒有內建機制維護兩個事物之間的狀態,同一個使用者在請求同一個頁面兩次的時候,HTTP協議不會認為這兩次請求都認為是同一使用者的請求,會當做兩次請求的獨立。會把兩次請求隔離開,會認為兩次請求是不同的兩個人進行請求或訪問。如果使用者進行了登入操作,再次請求頁面,HTTP協議不會認為該使用者之前進行過登入,沒有辦法保持之前的使用者登入狀態,所以不能再不同頁面之間進行使用者登入操作的跟蹤狀態和會話的保持。
會話控制就是為了解決跟蹤同一使用者的狀態。允許伺服器跟蹤同一客戶端做出的連續請求。保持使用者的狀態,從而保持使用者的登入狀態。
GET引數進行傳遞 資訊不安全,引數丟失
cookie 是一種由伺服器傳送給客戶端的片段資訊,儲存在客戶端瀏覽器的記憶體或硬碟當中的技術。
setcookie(key,value,expire,path,domain,sercure);
$_COOKIE 讀取資料
setcookie('a[b]','val');
setcookie('a[b]','',time()-1000);
cookie優點 儲存在客戶端,不會佔用伺服器的資源。效率高。 缺點:儲存在客戶端不安全,不建議將一些敏感、重要的資訊儲存在客戶端,使用者禁止cookie 將不能儲存cookie值。
session 將使用者的資訊儲存在伺服器中,使用者不能禁用session的使用。基於cookie的儲存,session_id 儲存在cookie中。cookie被禁用可以用URL引數進行傳遞,儲存session的狀態。
使用者讀取session ,會將cookie中儲存的session_id,在伺服器中找到對應的session檔案,然後讀取資料。
session_start();
$_SESSION;
$_SESSION = []; 刪除session資料
session_destroy();刪除session檔案
session.auto_start 是否自動開始session
session.cookie_domain 儲存session的cookie的有效域名
session.cookie_lifetime
session.cookie_path
session.name 預設PHPSESSION
session.save_path 儲存路徑
session.use_cookies 是否用cookie儲存session_id
session.use_trans_sid 是否用傳遞的方式傳遞session_id
session.save_handler 控制代碼
session.gc_probability =1 垃圾回收機制
session.gz_divisor =100
session.gc_maxlifetime =1440 最大生命週期S
每100次會清理1次 超過1440秒
session 安全,儲存在伺服器端 佔用資源
session_name session_id SID常量
session_set_save_handler() 儲存方式的改變 可以儲存在mysql redis memcache 中