Home  >  Article  >  Backend Development  >  自定义session处理方式导致加载验证码失败。

自定义session处理方式导致加载验证码失败。

WBOY
WBOYOriginal
2016-06-06 20:21:091479browse

一个很抓狂的问题,搞了一个下午没弄好,请高手指教

问题是验证码存在SESSION中,能写进数据库,但是在浏览器加载不出来。

验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
自定义session处理方式导致加载验证码失败。

在BackplatformController的构造方法里调用session类

下面是自定义的session类

<code><?php /**
 * Class SessionDBTool
 */

class SessionDBTool{
    private $db;    //保存数据库连接对象
    public function __construct(){
        //自定义session处理方法
        ini_set('session.save_handler','user');
        session_set_save_handler(
                array($this,'sess_open'),
                array($this,'sess_close'),
                array($this,'sess_read'),
                array($this,'sess_write'),
                array($this,'sess_destroy'),
                array($this,'sess_gc')
        );
        //开启session
        @session_start();
    }

    /**
     * 初始化
     */
    public function sess_open(){
        $this->db = MYSQLDB::getInstance($GLOBALS['config']['database']);
    }

    /**
     * 关闭
     * @return bool
     */
    public function sess_close(){
        return true;
    }

    /**
     * @param $sess_id
     * @return string
     */
    public function sess_read($sess_id){
        $sql="select sess_data from it_session where sess_id='$sess_id'";
        if($row=$this->db->fetchRow($sql)){
            return $row['sess_data'];
        }else{
            return '';
        }
    }

    /**
     * @param $sess_id
     * @param $sess_data
     */
    public function sess_write($sess_id,$sess_data){
        $expire=time();
        //存在则更新
        $sql="insert into it_session values('$sess_id','$sess_data','$expire') on duplicate key update sess_data='$sess_data',
        expire='$expire'";
        if($result=$this->db->myquery($sql)){
            return true;
        }
    }

    /**
     * @param $sess_id
     */
    public function sess_destroy($sess_id){

        $sql="delete from it_session where sess_id='$sess_id'";
        $result=$this->db->myquery($sql);
    }

    /**
     * @param $ttl
     * @return mixed
     */
    public function sess_gc($ttl){
        $now = time();
        $last = $now -$ttl;
        //删除过期session
        $sql = "delete from it_session where expire db->myquery($sql);
    }
}
</code>

下面是验证码存入session

自定义session处理方式导致加载验证码失败。

回复内容:

一个很抓狂的问题,搞了一个下午没弄好,请高手指教

问题是验证码存在SESSION中,能写进数据库,但是在浏览器加载不出来。

验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
自定义session处理方式导致加载验证码失败。

在BackplatformController的构造方法里调用session类

下面是自定义的session类

<code><?php /**
 * Class SessionDBTool
 */

class SessionDBTool{
    private $db;    //保存数据库连接对象
    public function __construct(){
        //自定义session处理方法
        ini_set('session.save_handler','user');
        session_set_save_handler(
                array($this,'sess_open'),
                array($this,'sess_close'),
                array($this,'sess_read'),
                array($this,'sess_write'),
                array($this,'sess_destroy'),
                array($this,'sess_gc')
        );
        //开启session
        @session_start();
    }

    /**
     * 初始化
     */
    public function sess_open(){
        $this->db = MYSQLDB::getInstance($GLOBALS['config']['database']);
    }

    /**
     * 关闭
     * @return bool
     */
    public function sess_close(){
        return true;
    }

    /**
     * @param $sess_id
     * @return string
     */
    public function sess_read($sess_id){
        $sql="select sess_data from it_session where sess_id='$sess_id'";
        if($row=$this->db->fetchRow($sql)){
            return $row['sess_data'];
        }else{
            return '';
        }
    }

    /**
     * @param $sess_id
     * @param $sess_data
     */
    public function sess_write($sess_id,$sess_data){
        $expire=time();
        //存在则更新
        $sql="insert into it_session values('$sess_id','$sess_data','$expire') on duplicate key update sess_data='$sess_data',
        expire='$expire'";
        if($result=$this->db->myquery($sql)){
            return true;
        }
    }

    /**
     * @param $sess_id
     */
    public function sess_destroy($sess_id){

        $sql="delete from it_session where sess_id='$sess_id'";
        $result=$this->db->myquery($sql);
    }

    /**
     * @param $ttl
     * @return mixed
     */
    public function sess_gc($ttl){
        $now = time();
        $last = $now -$ttl;
        //删除过期session
        $sql = "delete from it_session where expire db->myquery($sql);
    }
}
</code>

下面是验证码存入session

自定义session处理方式导致加载验证码失败。

已经搞定了,ob缓存没有清除

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn