Rumah > pembangunan bahagian belakang > tutorial php > 自定义session处理方式导致加载验证码失败。

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

WBOY
Lepaskan: 2016-06-06 20:21:09
asal
1503 orang telah melayarinya

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

问题是验证码存在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>
Salin selepas log masuk
Salin selepas log masuk

下面是验证码存入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>
Salin selepas log masuk
Salin selepas log masuk

下面是验证码存入session

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

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

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan