Session數據區
默認以 文件的形式存儲與服務器操作系統臨時目錄中!
當 session數據區過多時,文件形式的存儲,操作速度變慢。磁盤的讀寫(IO,input/output)開銷是很大的。
實際項目中,都會采用其他的方式更快地存儲session數據。典型的辦法:數據庫,內存。
以 數據庫存儲為例,講解:session數據入庫!
重寫 與 session數據區直接的相關操作即可:
最基本的只有2個:讀,寫!
一:定義2個可以完成讀和寫的函數。
二:告知session機制,在需要讀寫時,使用用戶自定義的讀寫函數完成。
定義2(其實共6個需要的相關函數)個可以完成讀和寫的函數告知session機制,在需要讀寫時,使用用戶自定義的讀寫函數完成
Session_set_save_handler(
開始函數,結束函數,讀函數,寫函數,刪除函數,GC函數
);
用來將用戶自定義的函數,設置成session存儲相關的函數。
以上的語法,僅僅是設置告知,不是調用以上6個函數,這六個函數,在session機制運行到某個時間點時,才會被調用!例如,咋開啟session時,才需要調用sessRead()
常規使用session開啟session機制
操作$_SESSION
該session中,每條記錄,就是一個session數據區,相當于原來的一個session文件。
表結構:
誰調用,誰傳參!
在PHP的session機制調用該函數時,會將當前的session-ID作為參數傳遞到函數中:
因此,需要定一個形參,接受傳遞的session-ID參數:
需要返回,讀取到的session數據字符串。就是sess_content字段的內容。如果沒有讀到,則返回空字符串即可,表示沒有session數據。
當PHPsession機制調用該函數執行寫操作時,會將 當前session-ID和 需要寫入的內容(序列化好的)傳遞到函數!
需要2個形參來接收:
測試:
銷毀session時。
執行了html' target='_blank'>PHP函數:
Session_destroy();
可以銷毀session,刪除對應的session數據區,同時關閉session機制!
由于需要刪除session數據區,需要增加用于刪除的方法:
PHP的session機制,在調用sessDelete時,會傳遞 當前session-ID作為參數:
需要定義形參來接收:
垃圾回收操作:sessGC()
垃圾:服務器上過時的session數據區。、
垃圾如何判定?如果一個session數據區已經超過多久沒有使用(最后一次寫操作)了,就是被視為垃圾數據。
該時間臨界點:默認1440s。可以被配置:
配合最后寫入時間,就可以斷定是否為垃圾
需要增加字段,記錄最后寫入時間。
寫入時,更新該字段:
sessWrite();
判斷條件:過期
Last_write < 當前時間-1440
如何刪除?在 session_start()過程中,開啟session機制過程中:有幾率地執行 垃圾回收操作。一旦執行,就會刪除所有的過期的垃圾數據區。
默認的概率為1/1000。
可以設置該幾率:
可能性:
基數(除數):
調整幾率測試:
建議在腳本周期調整,使用函數ini_set(),在開啟session機制前完成:
實現 sessGC()
PHP的session機制將 最大有效期作為參數,傳遞過來!
初始化工作
可保證在第一個執行。將初始代碼,在sessBegin完成:
例如初始化數據庫連接:
收尾性工作
Return true;
Session_set_save_handler()先于session_start()被調用。
不要自動開啟session!php.ini: session.auto_start = 0
PHP配置項:session.save_handlerPHP所使用的存儲機制:
最后建議,將以上配置改為 user: 表示用戶自定義!
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答