一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

優(yōu)化使用mysql存儲(chǔ)session的php代碼

之前寫過兩篇文章《自定義SESSION(二)――數(shù)據(jù)庫保存》和《我為什么不使用session》
  但后來發(fā)現(xiàn)都有問題。前者處理在實(shí)際中幾乎沒什么用處,而且session回收還得自己另外處理。后者頻繁的操作數(shù)據(jù)庫,打來了很大的性能問題。

  這兩天仔細(xì)考慮下,大致給出一個(gè)方案,但還沒有具體詳細(xì)的測(cè)試。
  1、session處理和統(tǒng)計(jì)結(jié)合起來。同時(shí)游客也都有記錄。
  2、完全使用數(shù)據(jù)庫和cookie來模擬session的功能。
  3、用戶的對(duì)session的操作都盡量保證在一條sql語句完成。不用到session的時(shí)候,絕對(duì)不多一條查詢。
  4、為了效率起見,session的回收沒有集成進(jìn)來,但提供了接口,可以調(diào)用實(shí)現(xiàn)。

暫時(shí)給出代碼,不具體解釋。
sql



CREATE TABLE `*****_session` (
 `sid` char(32) NOT NULL,
 `uid` int(10) NOT NULL,
 `username` char(32) NOT NULL,
 `usertype` tinyint(1) NOT NULL,
 `activetime` int(10) NOT NULL,
 `expiry` int(10) NOT NULL,
 `ip` char(15) NOT NULL,
 `url` char(80) NOT NULL,
 `value` char(255) NOT NULL,
 PRIMARY KEY  (`sid`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;




php代碼

<? 
class session{ 

    private $_sessionPrex= '';//session的前綴 

    private $_time = '';//當(dāng)前時(shí)間 

    private $_model = null;//數(shù)據(jù)庫操作模型 

    private $_expiry = 1200;//session有效時(shí)間 

    private $_domain = '';//session的作用域 

    protected $isNew = 0;//判定操作動(dòng)作 0 更新 1 增加 

    protected $session = array();//對(duì)應(yīng)的一條session記錄 

    public function __construct($options){ 
        $this->_setOptions($options); 
        if(empty($this->_time))$this->_time = time(); 
        $this->session['activetime'] = $this->_time; 
    } 

    public function start(){ 
        $this->_getSid(); 
    } 

    public function set($key,$value){ 
        if(in_array($key,array('uid','username','usertype','url','expiry'))){ 
            if($key == 'expiry'){ 
                $this->_setCookie($this->_sessionPrex.'_sid',$this->session['sid'],$value); 
                $this->_setCookie($this->_sessionPrex.'_uid',$this->session['uid'],$value); 
            } 
            $this->session[$key] = $value; 
        }else{ 
            $other = $this->session['value']; 
            $other[$key] = $value; 
            $this->session['value'] = $other; 
        } 
    } 

    public function get($key){ 
        if(in_array($key,array('uid','username','usertype','url','expiry'))){ 
            return $this->session[$key]; 
        }else{ 
            if(isset($this->session['value'][$key])){ 
                return $this->session['value'][$key]; 
            } 
            return null; 
        } 
    } 

    public function gc($file,$time = 1200){ 
        $lasttime = file_get_contents($file); 
        if($lasttime + $time<$this->_time){ 
            file_put_contents($file,$this->_time); 
            return $this->_model->delete('activetime+expiry<'.$this->_time); 
        } 
    } 

    public function destroy(){ 
        $this->session['uid'] = 0; 
        $this->session['username'] = ''; 
        $this->session['usertype'] = -1; 
        $this->session['expiry'] = $this->_expiry; 
        $this->session['value'] = array(); 
        $this->_setCookie($this->_sessionPrex.'_sid',$this->session['sid'],$this->_expiry); 
        $this->_setCookie($this->_sessionPrex.'_uid',$this->session['uid'],$this->_expiry); 
    } 

    public function __destruct(){ 
        $this->_save(); 
    } 

    private function _save(){ 
        $dbSession = $this->session; 
        $dbSession['value'] = serialize($dbSession['value']); 
        if(strlen($dbSession['value'])>255)$this->_error('session->value is too long!'); 
        if($this->isNew == 1){ 
            //增加 
            $this->_model->insert($dbSession); 
        }else{ 
            //更新 
            $sid = $dbSession['sid']; 
            $this->_model->update(array_slice($dbSession,1),'sid=/''.$sid.'/''); 
        } 
    } 

    private function _getSession($sid){ 
        $dbSession = $this->_model->detail('sid = /''.$sid.'/''); 
        if(!$dbSession)return false; 
        $dbSession['value'] = unserialize($dbSession['value']); 
        $this->session = array_merge($dbSession,$this->session);         
        return true; 
    } 

    private function _getSid(){ 
        $sid = strip_tags($_COOKIE[$this->_sessionPrex.'_sid']); 
        if(strlen($sid)==32){ 
            if($this->_getSession($sid)){ 
                return true; 
            } 
        }else{ 
            $sid = md5(time().mt_rand(1000,10000)); 
            $this->_setCookie($this->_sessionPrex.'_sid',$sid); 
        } 
        $this->_setCookie($this->_sessionPrex.'_uid',0); 
        $this->session = array( 
                'uid' => 0, 
                'username' => '', 
                'usertype' => -1, 
                'activetime' => $this->_time, 
                'ip' => $this->_getip(), 
                'url' => strip_tags($_SERVER['REQUEST_URI']), 
                'expiry' =>$this->_expiry, 
                'value' => array() 
        ); 
        $this->isNew = 1; 
        $this->session['sid'] = $sid; 
    } 

    private function _setCookie($name,$value,$expiry=0){ 
        if(empty($expiry))$expiry = $this->_expiry; 
        if(empty($this->_domain)){ 
            setcookie($name,$value,$this->_time + $expiry,'/'); 
        }else{ 
            setcookie($name,$value,$this->_time + $expiry,'/',$this->_domain); 
        } 
    } 

    private function _getip(){ 
        return getip(); 
    } 

    private function _setOptions($options){ 
        foreach ($options as $key=>$value){ 
            if(in_array($key,array('sessionPrex','time','model','expiry','domain'))){ 
                $key = '_'.$key; 
                $this->$key = $value; 
            } 
        } 
    } 

    private function _error($msg){ 
        throw new phpbean_Exception($msg); 
    } 

?> 

(注意,該代碼不能直接使用,本文主要是提供一種思路) 

php技術(shù)優(yōu)化使用mysql存儲(chǔ)session的php代碼,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲另类图片专区 | 久久不见久久见免费影院 | 国产成人啪精品视频免费网 | 国产精品视频一区二区三区小说 | 桃花视频在线观看高清版mv | 四虎国产精品视频免费看 | 国产91一区二区在线播放不卡 | 久久中文字幕视频 | 97人洗澡从澡人人爽人人模 | 二区国产 | 国产视频 每日更新 | 黄网在线免费看 | 国产欧美精品区一区二区三区 | 激情婷婷成人亚洲综合 | 久久这里有精品视频任我鲁 | 绝对真实国产乱 | 伊人不卡久久大香线蕉综合影院 | 亚洲一区二区三区免费观看 | 国产精品福利小视频 | 国产视频福利 | 骚碰人人 | 国产日产欧产精品推荐推荐 | 五月天婷婷色综合 | 日韩看片 | 国产精品四虎在线观看免费 | 男女毛片免费视频看 | 成年人午夜免费视频 | 国产亚洲精品国产第一 | 一个人免费播放在线视频看片 | 亚洲欧洲色天使日韩精品 | 91精品视频在线 | 亚洲 欧美 在线观看 | 看全黄大色黄大片老人做 | 亚洲综合久久久 | 国产女人综合久久精品视 | 亚洲精品不卡 | 日本人视频18jizz免费 | 欧美三级黄视频 | 国产精品麻豆久久久 | 深夜小视频在线观看 | 午夜在线观看视频在线播放版 |