php如何重寫session的儲存機制

來源:互聯網
上載者:User
這篇文章主要介紹了關於php如何重寫session的儲存機制,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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資料區,相當於原來的一個session檔案。

表結構:

讀操作:sessRead()

  誰調用,誰傳參!

在PHP的session機制調用該函數時,會將當前的session-ID作為參數傳遞到函數中:

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

需要返回,讀取到的session資料字串。就是sess_content欄位的內容。如果沒有讀到,則返回Null 字元串即可,表示沒有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: 表示使用者自訂!

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.