這篇文章主要介紹了php如何重寫session的儲存機制,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
Session資料區
預設以檔案的形式儲存與伺服器作業系統暫存目錄中!
當 session資料區過多時,檔案形式的存儲,操作速度變慢。磁碟的讀寫(IO,input/output)開銷是很大的。
在實際專案中,都會採用其他的方式更快地儲存session資料。典型的辦法:資料庫,記憶體。
以 資料庫儲存為例,講解:session資料入庫!
重寫 與 session資料區直接的相關操作即可:
最基本的只有2個:讀,寫!
一:定義2個可以完成讀取和寫入的函數。
二:告知session機制,在需要讀寫時,使用使用者自訂的讀寫函數完成。
相關專題推薦:php session(包含圖文、影片、案例)
# 告知session機制,在需要讀寫時,使用使用者自訂的讀寫函數完成
Session_set_save_handler( 开始函数,结束函数,读函数,写函数,删除函数,GC函数 );
用來將使用者自訂的函數,設定成session儲存相關的函數。
以上的語法,只是設定告知,不是呼叫以上6個函數,這六個函數,在session機制運作到某個時間點時,才會被調用!例如,當咋開啟session時,才需要呼叫sessRead()
開啟session機制
##動作$_SESSION
該session中,每筆記錄,就是一個session資料區,相當於原來的一個session檔。
表格結構:
讀取操作:
sessRead()因此,需要定一個形參,接受傳遞的session-ID參數:
需要返回,讀取到的session資料字串。就是sess_content字段的內容。如果沒有讀到,則傳回空字串即可,表示沒有session資料。
寫入操作:sessWrite()
當PHPsession機制呼叫該函數執行寫入操作時,會將目前session-ID和需要寫入的內容(序列化好的)傳遞到函數!
刪除動作:
sessDelete()
#銷毀session時。
執行了PHP函數:
Session_destroy();可以銷毀session,刪除對應的session資料區,同時關閉session機制!
由於需要刪除session資料區,需要增加刪除的方法:
需要定義形參考來接收:
#
##########垃圾回收作業:sessGC()####### ## 垃圾:伺服器上過時的session資料區。 、######垃圾如何判定? ###### 如果一個session資料區已經超過多久沒有使用(最後一次寫入操作)了,就是被視為垃圾資料。 ######該時間臨界點:預設1440s。可以被配置:###
配合最後寫入時間,就可以斷定是否為垃圾
需要增加字段,記錄最後寫入時間。
寫入時,更新該欄位:
sessWrite();
#
判斷條件:過期
Last_write < 目前時間-1440
在 session_start()過程中,開啟session機制過程中:有幾率地執行 垃圾回收操作。一旦執行,就會刪除所有的過期的垃圾資料區。
預設的機率為1/1000。
可以設定此幾率:
可能性:
#基底數(除數):
#調整幾率測試:
建議在腳本週期調整,使用函數ini_set(),在開啟session機制前完成:
實現sessGC()
PHP的session機制將最大有效期限作為參數,傳遞過來!
以上是php如何重寫session的儲存機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!