自定义session储存 数据库 方式类

在php.ini配置文件中更改设置 (Registered_save_handlers 有三种方式 files user memcache)

session.save_handler = user 表示用户自定义session类

';            return true;        }        //关闭        public static function close(){            echo 'close
';           return true;        }        //读取 echo         public static function read($sid){            echo 'read
';               $query = "select * from session where sid = ?";            $stmt   = self::$pdo->prepare($query);            $stmt->execute(array($sid));            $result = $stmt->fetch(PDO::FETCH_ASSOC);            //还没有会话信息,返回空字符串            if(!$result){                return ' ';            }            //如果超出时间,销毁session            if($result['utime']+self::$maxlifetime < self::$ctime){                self::destroy($sid);                return ' ';            }            //如果用户换了IP或换了浏览器            if($result['uip']!=self::$uip || $result['uagent'] != self::$uagent){                self::destroy($sid);                return ' ';            }            return $result['sdata'];        }        //写入 $_SESSION['username']='yang'        public static function write($sid,$data){            echo 'write
';             $query = "select * from session where sid =? ";            $stmt   = self::$pdo->prepare($query);            $stmt->execute(array($sid));            $result = $stmt->fetch(PDO::FETCH_ASSOC);            //若有数据,则更新            if($result){                //如果数据和原来的不一样 或者 当前时间大于文件修改时间加30秒的时候 才更新                if($result['sdata']!=$data || $result['utime']+30< self::$ctime){// +加号优先级高于 
<小于号                $query = "update session set sdata = ?, utime = ? where sid =? ";                $stmt   = self::$pdo->
prepare($query);                $stmt->execute(array($data,self::$ctime,$sid));                }            }else{//插入数据            if(!empty($data)){            $query = "insert into session(sid,sdata,utime,uip,uagent) values(?,?,?,?,?)";            $stmt   = self::$pdo->prepare($query);            $stmt  -> execute(array($sid,$data,self::$ctime,self::$uip,self::$uagent));            }            }            }        //销毁 session_destroy        public static function destroy($sid){            echo 'destroy
';                 $query = "delete from session where sid = ?";            $stmt   = self::$pdo->prepare($query);           return $stmt  -> execute(array($sid));                    }        //回收垃圾        public static function gc($maxlifetime){            echo 'gc
';                        $query = "delete from session where utime < ?";            $stmt   = self::$pdo->prepare($query);            return $stmt  -> execute(array(self::$ctime-self::$maxlifetime));        } }  DBSession::start($pdo);

创建session表

 create table session( sid char(32) not null default ' ', utime int not null default 0, sdata text, uip char(15) not null default ' ', uagent varchar(200) not null default ' ', index session_sid(sid) );