首頁  >  文章  >  後端開發  >  php如何重寫session的儲存機制

php如何重寫session的儲存機制

不言
不言原創
2018-07-10 18:00:463271瀏覽

php如何重寫session的儲存機制

這篇文章主要介紹了php如何重寫session的儲存機制,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

Session資料區

預設以檔案的形式儲存與伺服器作業系統暫存目錄中!

當 session資料區過多時,檔案形式的存儲,操作速度變慢。磁碟的讀寫(IO,input/output)開銷是很大的。

在實際專案中,都會採用其他的方式更快地儲存session資料。典型的辦法:資料庫,記憶體。

以 資料庫儲存為例,講解:session資料入庫!

重寫 與 session資料區直接的相關操作即可:

最基本的只有2個:讀,寫!

一:定義2個可以完成讀取和寫入的函數。

二:告知session機制,在需要讀寫時,使用使用者自訂的讀寫函數完成。

相關專題推薦php session(包含圖文、影片、案例)

定義2(其實共6個需要的相關函數)個可以完成讀寫的函數

 

告知session機制,需要讀寫時,使用使用者自訂的讀寫函數完成

Session_set_save_handler(
开始函数,结束函数,读函数,写函数,删除函数,GC函数
);

用來將使用者自訂的函數,設定成session儲存相關的函數。

 

以上的語法,只是設定告知,不是呼叫以上6個函數,這六個函數,在session機制運作到某個時間點時,才會被調用!例如,當咋開啟session時,才需要呼叫sessRead()

常規使用session

開啟session機制

##動作

$_SESSION

建立session表

該session中,每筆記錄,就是一個session資料區,相當於原來的一個session檔。

表格結構:

 

讀取操作:

sessRead()

  誰調用,誰傳參! 在PHP的session機制呼叫函數時,會將目前的session-ID作為參​​數傳遞到函數中:

因此,需要定一個形參,接受傳遞的session-ID參數:

需要返回,讀取到的session資料字串。就是sess_content字段的內容。如果沒有讀到,則傳回空字串即可,表示沒有session資料。

寫入操作:

sessWrite()

當PHPsession機制呼叫該函數執行寫入操作時,會將目前session-ID和需要寫入的內容(序列化好的)傳遞到函數!

需要2個形參來接收:

測試:

 

刪除動作:

sessDelete()

#銷毀session時。

執行了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()##:

初始化工作

可保證在第一個執行。將初始程式碼,在sessBegin完成:

例如初始化資料庫連線:

 

結尾操作sessEnd():

收尾性工作

Return true;

 

語法細節

先設定在開啟session機制

Session_set_save_handler()先於session_start( )被調用。

不要自動開啟session! php.ini: session.auto_start = 0

PHP#設定項:session.save_handler

#PHP所使用的儲存機制:

最後建議,將上述配置改為user: 表示使用者自訂!

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

如何透過php來遍歷資料夾取得圖片目錄名稱及檔案名稱

如何解決php在foreach迴圈後留下的陣列引用問題

以上是php如何重寫session的儲存機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn