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

创新互联建站凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、成都网站设计、成都网站制作、网站优化、软件开发、网站改版等服务,在成都10余年的网站建设设计经验,为成都近1000家中小型企业策划设计了网站。
在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) );