一,為什么我們有必要將 數據存入到數據庫?
1.默認以文件的方式存儲 數據,往往無法持久保存數據,因為 的垃圾或收機制,會定期將過期數據都干掉.
2.在大負載,高并發的情況下,以文件方式存儲數據,由于文件系統的限制,將可能導致服務器運行效率大大降低
二,如何設置將 數據直接保存到數據庫中?
1.使用() 或者直接修改php.ini 中的配置項. ,將其值設置為user, 表示 存取
方式使用"自定義方式",由dler() 函數的定義決定.
dler 的默認值為files,表示 默認以文件方式進行存取,其存放的路徑由. 配置項決定
該配置項可以設在多個路徑.
2.在數據庫 中,創建表 表,字段如下:
char(64), 主鍵,存儲 id
char(255), 存儲 值
int(11), 存儲過期時間
3.代碼中,調用dler() ,并定義其參數中要求的6 個函數/方法
open( $, $)
鏈接數據庫
close()
直接 TRUE
read( $)
讀取指定 id 的值
write( $, $data)
向指定的 id 設置值
($)
將指定 id 的數據設置為過期
gc($)
判斷數據庫中所有 的數據的過期時間,對于已經過期的數據執行刪除操作. 三,1, 的生命周期
開始:建立鏈接,服務器分配一個 id
結束: 數據過期或者失效
2.判斷: 的生命周期是在回收機制將 數據清除才結束嗎?
不是的,因為 的垃圾回收機制是按一定的概率激活的. 額生命周期結束點是: 數據過期
或者無效.當 數據過期或者無效后,并不能保證馬上調用 垃圾回收機制將數據清楚.
3.如何延長 的生命周期
通過arams() 設置一個較長的過期時間
4.如何實現用戶 數據在確定的30 秒后失效
在$[] 中增加一個保存用戶首次訪問時間戳的變量,然后,在每次訪問時,都判斷該變量是否超過30 秒,如果超過,強制性的執行
dler 函數介紹
作用:
設置用戶級別(用戶自定義) 的 存儲函數
參數列表:
bool dler ( open/函數/方法名, close/函數/方法名, read/函數/方法名,
write/函數/方法名, /函數/方法名, gc/函數/方法名)
以下是各函數/方法的參數列表:
open( $, $)
相當于類中的構造函數,這是 啟動(設置了\. 或者手動調用())是調用的第一個函數,
返回TRUE 表示成功,返回FALSE 表示失敗.
close()
相當于析構函數,在調用write 回調函數后執行.在調用里() 函數后,也會執行.返回TRUE 表示成功,返回FALSE 表失敗.
read( $)
如果獲取到數據返回一個已經經過編碼的字符串,否則返回空.
當() 啟動時,將會調用該方法. PHP在調用該函數前,會首先調用open() 函數.
read()返回的數字的字符串的編碼格式應該和write() 寫入的一樣.read() 返回的字符串將自動被反序列化,被用于$ 這個超級全局變量.
這種序列化/反序列化的方式,是由. 設定的.
write( $, $data)
當 執行關閉操作或者調用() 時,該函數將被調用.調用該函數后,將自動調用close().
($)
當調用里() 或者調用d() 并設置銷毀參數為TRUE 時,
調用該函數.返回TRUE 表示成功,返回FALSE 表示失敗.
gc($)
當垃圾回收機制被激活時,該函數將被調用.返回TRUE 表示成功,返回FALSE 表示失敗.
常用的 id 處理方式:
1).傳遞策略
A) 優先支持 方式
B) 對于關閉了 的用戶,使用get 方式傳遞
實現方案:
A) 在URL 中包含SID 預定義常量,它將視情況以get 或者 方式傳遞 id. 參考PHP 手冊的"函數參考手冊"
B) 在php.ini 中,設置, 值為1
如何在 中,設置PHP 只使用get 方式保存 ID?
1.以root 身份編輯php.ini 文件, 找到相關配置項,設置如下:
, = 0 ; id禁用方式傳遞
, = 0 ; id可以使用外的其他方式傳遞
2.以root 身份重啟