zoukankan      html  css  js  c++  java
  • php改写session到数据库

    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。
  • 相关阅读:
    Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是不可缺少的!
    java基础——static keyword小节
    iOS UI08_UITableView
    Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)
    Android简单实现BroadCastReceiver广播机制
    UI组件之TextView及其子类(一)TextView和EditText
    BZOJ 3112 [Zjoi2013]防守战线 线性规划
    反射 + 配置文件 实现IOC容器
    android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
    【LeetCode-面试算法经典-Java实现】【058-Length of Last Word (最后一个单词的长度)】
  • 原文地址:https://www.cnblogs.com/zywf/p/5067992.html
Copyright © 2011-2022 走看看