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