Home > Article > Backend Development > 自定义session处理方式导致加载验证码失败。
一个很抓狂的问题,搞了一个下午没弄好,请高手指教
问题是验证码存在SESSION中,能写进数据库,但是在浏览器加载不出来。
验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
在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中,能写进数据库,但是在浏览器加载不出来。
验证码输出方法所在的控制器 继承自BackplatformController控制器 ,
在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
已经搞定了,ob缓存没有清除