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。
时间: 2024-12-28 00:25:42