標籤:
將SESSION儲存到mysql中
<?php/** * SessionMysql 資料庫儲存類 */defined(‘IN_QIAN‘) or exit(‘Access Denied‘);class SessionMysql {public $lifetime = 1800; // 有效期間,單位:秒(s),預設30分鐘public $db;public $table;/** * 建構函式 */public function __construct() {session_module_name("user");//ini_set(‘session.save_handler‘, ‘user‘); ini_set(‘session.use_cookies‘, 1);$this->db = Base::loadModel(‘SessionModel‘);$this->lifetime = Base::loadConfig(‘system‘, ‘session_lifetime‘);session_set_save_handler(array(&$this, ‘open‘),// 在運行session_start()時執行array(&$this, ‘close‘),// 在指令碼執行完成 或 調用session_write_close() 或 session_destroy()時被執行,即在所有session操作完後被執行array(&$this, ‘read‘),// 在運行session_start()時執行,因為在session_start時,會去read當前session資料array(&$this, ‘write‘),// 此方法在指令碼結束和使用session_write_close()強制提交SESSION資料時執行array(&$this, ‘destroy‘),// 在運行session_destroy()時執行array(&$this, ‘gc‘)// 執行機率由session.gc_probability 和 session.gc_divisor的值決定,時機是在open,read之後,session_start會相繼執行open,read和gc);session_start(); // 這也是必須的,開啟session,必須在session_set_save_handler後面執行}/** * session_set_save_handler open方法 * * @param $savePath * @param $sessionName * @return true */public function open($savePath, $sessionName) {return true;}/** * session_set_save_handler close方法 * * @return bool */public function close() {return $this->gc($this->lifetime);}/** * 讀取session_id * * session_set_save_handler read方法 * @return string 讀取session_id */public function read($sessionId) {$condition = array(‘where‘ => array(‘session_id‘ => $sessionId),‘fields‘ => ‘data‘);$row = $this->db->fetchFirst($condition);return $row ? $row[‘data‘] : ‘‘;}/** * 寫入session_id 的值 * * @param $sessionId 會話ID * @param $data 值 * @return mixed query 執行結果 */public function write($sessionId, $data) {$userId = isset($_SESSION[‘userId‘]) ? $_SESSION[‘userId‘] : 0;$roleId = isset($_SESSION[‘roleId‘]) ? $_SESSION[‘roleId‘] : 0;$grouId = isset($_SESSION[‘grouId‘]) ? $_SESSION[‘grouId‘] : 0;$m = defined(‘ROUTE_M‘) ? ROUTE_M : ‘‘;$c = defined(‘ROUTE_C‘) ? ROUTE_C : ‘‘;$a = defined(‘ROUTE_A‘) ? ROUTE_A : ‘‘;if (strlen($data) > 255) {$data = ‘‘;}$ip = get_ip();$sessionData = array(‘session_id‘=> $sessionId,‘user_id‘=> $userId,‘ip‘=> $ip,‘last_visit‘=> SYS_TIME,‘role_id‘=> $roleId,‘group_id‘=> $grouId,‘m‘=> $m,‘c‘=> $c,‘a‘=> $a,‘data‘=> $data,);return $this->db->insert($sessionData, 1, 1);}/** * 刪除指定的session_id * * @param string $sessionId 會話ID * @return bool */public function destroy($sessionId) {return $this->db->delete(array(‘session_id‘ => $sessionId));}/** * 刪除到期的 session * * @param $lifetime session有效期間(單位:秒) * @return bool*/public function gc($lifetime) {$expireTime = SYS_TIME - $lifetime;return $this->db->delete("`last_visit`<$expireTime");}}?>
PHP session_set_save_handler將SESSION儲存到Mysql中