標籤:
session改寫mysql
在調用 session_start();的地方改用執行個體化本類即可new SessionDB();
session_set_save_handler( array($this, ‘userSessionBegin‘), array($this, ‘userSessionEnd‘), array($this, ‘userSessionRead‘), array($this, ‘userSessionWrite‘), array($this, ‘userSessionDelete‘), array($this, ‘userSessionGC‘) );如果是類裡要這樣寫,因為要明確是哪個類的方法如果在類外可以這樣寫
session_set_save_handler(
‘userSessionBegin‘,
‘userSessionEnd‘,
‘userSessionRead‘,
‘userSessionWrite‘,
‘userSessionDelete‘,
‘userSessionGC‘)
<?php/** * session入庫工具類 */class SessionDB { private $_dao; public function __construct() { //設定session處理器 ini_set(‘session.save_handler‘, ‘user‘); session_set_save_handler( array($this, ‘userSessionBegin‘), array($this, ‘userSessionEnd‘), array($this, ‘userSessionRead‘), array($this, ‘userSessionWrite‘), array($this, ‘userSessionDelete‘), array($this, ‘userSessionGC‘) ); //開啟 session_start(); } function userSessionBegin() { //初始化DAO $config = array(‘host‘ => ‘127.0.0.1‘, ‘port‘ => ‘3306‘, ‘username‘=>‘shop34‘, ‘password‘ => ‘1234abcd‘, ‘charset‘=>‘utf8‘, ‘dbname‘=>‘shop34‘); $this->_dao = MySQLDB::getInstance($config); } function userSessionEnd() { return true; } /** * 讀操作 * 執行時機: session機制開啟程中執行 * 工作: 從當前session資料區讀取內容 * @param $sess_id string * @return string */ function userSessionRead($sess_id) { //查詢 $sql = "SELECT session_content FROM `p34_session` WHERE session_id=‘$sess_id‘"; return (string) $this->_dao->getOne($sql); } /** * 寫操作 * 執行時機: 指令碼周期結束時,PHP在整理收尾時 * 工作: 將當前指令碼處理好的session資料,持久化儲存到資料庫中! * @param $sess_id string * @param $sess_content string 序列化好的session內容字串 * @return bool */ function userSessionWrite($sess_id, $sess_content) { // 完成寫 $sql = "REPLACE INTO `p34_session` VALUES (‘$sess_id‘, ‘$sess_content‘, unix_timestamp())"; return $this->_dao->query($sql); } /** * 刪除操作 * 執行時機: 調用了session_destroy()銷毀session過程中被調用 * 工作: 刪除當前session的資料區(記錄) * @param $sess_id string * @return bool */ function userSessionDelete($sess_id) { //刪除 $sql = "DELETE FROM `p34_session` WHERE session_id=‘$sess_id‘"; return $this->_dao->query($sql); } /** * 記憶體回收操作 * 執行時機: 開啟session機制時,有機率的執行 * 工作: 刪除那些到期的session資料區 * @param $max_lifetime * @return bool */ function userSessionGC($max_lifetime) { //刪除 $sql = "DELETE FROM `p34_session` WHERE last_time<unix_timestamp()-$max_lifetime"; return $this->_dao->query($sql); }}
gc回收器調用次數改寫
ini_set(‘session.gc_probability‘, ‘1‘); ini_set(‘session.gc_divisor‘, ‘3‘);//session.gc_divisor 與 session.gc_probability 合起來定義了在每個會話初始化時啟動 gc(garbage collection 記憶體回收)進程的機率。此機率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的機率啟動 gc 進程。session.gc_divisor 預設為 100。
php改寫session到資料庫