<?php
if(!defined('APP_PATH')||!defined('DOYO_PATH')){exit('Access Denied');}
class sysession{
private $session_Overdue;
private $session_dir;
private $sessionidname;
public function __construct(){
$this->session_Overdue=3600;
$this->session_dir=$GLOBALS['G_DY']['sp_session'].'/';
ini_set('session.save_handler','user');
session_set_save_handler (
array ($this, 'open' ),
array ($this, 'close' ),
array ($this, 'read' ),
array ($this, 'write' ),
array ($this, 'destroy' ),
array ($this, 'gc' )
);
$this->sessionidname = userBrowser();
if (isset($_COOKIE[$this->sessionidname])) {
$sessionid = $_COOKIE[$this->sessionidname];
}else{
$expire=time()+60*60*24*1;
$sessionid = rand(201,2000).''.time().''.rand(1,200);
setcookie($this->sessionidname,$sessionid , $expire);
}
if($_REQUEST['session_id']){if(preg_match("/^[a-zA-Z0-9]*$/", $_REQUEST['session_id']) != 0){
session_id($_REQUEST['session_id']);}}else{
session_id($sessionid);
}
session_start();
}
public function getid(){
return $_COOKIE[$this->sessionidname];
}
public function open(){
return true;
}
public function close(){
return true;
}
public function read($id=null){
if ($id == null) {
$id = $this->getid();
}
$value = $this->sessdb('r',$id);
if($value){
return $value['datas'];
}else{
return '';
}
}
public function write($id= null,$datas,$who = ''){
if($who != 'admin'){ return 'error';}
if ($id == null) {
$id = $this->getid();
}
$ses=array('datas'=>$datas);
$this->sessdb('w',$id,$ses,$this->session_Overdue,$who);
return true;
}
public function destroy($id){
$this->sessdel();
return $this->sessdb('c',$id);
}
public function gc($max){
$this->sessdel();
return true;
}
public function __destruct(){
$this->sessdel();
}
private function sessdb($method, $name, $value = NULL, $life_time = -1,$who){
$filedir=$this->session_dir;
if(!is_dir($filedir))__mkdirs($filedir);
$sfile = $filedir.'/'.$name.".php";
if('w' == $method){
$life_time = ( -1 == $life_time ) ? '300000000' : $life_time;
/*$value = '<?php die();?>'.( time() + $life_time ).serialize($value);
//var_dump($value);
var_dump($who);
var_dump($value['datas']['id']);*/
$value = '<?php die();?>'.( time() + $life_time ).json_encode($value);
$res = file_put_contents($sfile, $value);
return $res;
}elseif('c' == $method){
return @unlink($sfile);
}else{
return $this->sesstime($sfile);
}
}
private function sessdel() {
$dirName=@opendir($this->session_dir);
while(($file = @readdir($dirName)) !== false){
if($file!='.' && $file!='..'){
$this->sesstime($this->session_dir.'/'.$file);
}
}
closedir($dirName);
}
private function sesstime($sfile){
if( !is_readable($sfile) )return false;
$arg_data = file_get_contents($sfile);
if( substr($arg_data, 14, 10) < time() ){
@unlink($sfile);
return false;
}
// $str = substr($arg_data, 24);
// $data = json_decode($str,true);
// //var_dump($data['datas']);exit();
// var_dump($data->datas);exit();
return json_decode(substr($arg_data, 24),true);
}
}