国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

我為什么不使用session

2019-11-17 04:23:42
字體:
來源:轉載
供稿:網(wǎng)友

 在考慮session的問題上,我最終放棄了session:
  1、原本的session是使用文件來管理的。文件系統(tǒng)的好壞直接影響session的性能,尤其當有幾K人同時在線的時候,尤其突出。解決方法有兩個:數(shù)據(jù)庫和文件(使用哈希路徑)。
  2、原有session的擴展性和可控制性不好。不利于結合我現(xiàn)有的系統(tǒng)。
  3、在選用數(shù)據(jù)庫的時候,我并沒有選擇sqlite,上次我測試sqlite效率在win xp上效率沒有想象中的好。

  最后我選擇了myql的heap表來處理session,并且把session處理和online在線用戶統(tǒng)計結合起來。

  下面給出代碼為我的一個實例(沒提供其他的細節(jié)了,具體使用要相應修改)


<?
/**
  * 處理在線用戶和對session的模擬
  * CREATE TABLE `webQQ_session` (

`sid` char( 32 ) NOT NULL ,
`uid` mediumint( 8 ) NOT NULL ,
`username` char( 80 ) NOT NULL ,
`ismember` tinyint( 1 ) NOT NULL ,
`logintime` int( 10 ) NOT NULL ,
`activetime` int( 10 ) NOT NULL ,
PRIMARY KEY ( `sid` )
) ENGINE = HEAP DEFAULT CHARSET = gb2312
  * @author:feifengxlq<http://www.phpobject.net> feifengxlq#Gmail.com
  * @since:2006-10-23
  * @copyright:http://www.phpobject.net
  * 注意:這個文件的使用必須和其他文件結合:比如對cookid的過濾,一些基本函數(shù)和數(shù)據(jù)庫操作類
*/
class session
{
    var $MySQL;
   
    var $cookie_id='webqq_sid';
   
    var $session=array();
   
    var $max_time=1200;//默認最大時間為20分鐘
   
    function __construct()
    {
        $this->mysql=new module(TB_PREX.'_session');//需要外部支持
        $this->start();
    }
   
    function start()
    {
        if(empty($_COOKIE[$this->cookie_id]))
        {
            //初始化session
            $this->create();
        }else{
            //cookie已經(jīng)存在,檢查是否存在數(shù)據(jù)庫中
            $sid=$_COOKIE[$this->cookie_id];
            if($this->mysql->detail('where sid=/''.$sid.'/''))
            {
               //存在數(shù)據(jù)庫中
               $row['activetime']=time();
               $this->mysql->update($row,'where sid=/''.$sid.'/'');
               $this->session=$this->mysql->detail('where sid=/''.$sid.'/'');
            }else{
               //不存在數(shù)據(jù)庫中
               $this->create();
            }           
        }
        //刪除數(shù)據(jù)庫中不在線的用戶
        $this->mysql->delete('where activetime+'.$this->max_time.'<'.time());
    }
   
    function register($name,$value,$update=false)
    {
        if(array_key_exists($name,$this->session)){
            $this->session[$name]=$value;
        }
        if($update)$this->update();
    }
   
    function registry($name='')
    {
        if(empty($name)) return $this->session;
        if(array_key_exists($name,$this->session)){
            return $this->session[$name];
        }
    }
    //更新數(shù)據(jù)庫里面的session信息
    function update()
    {
        $row['uid']=$this->session['uid'];
        $row['username']=$this->session['username'];
        $row['ismember']=$this->session['ismember'];
        $row['logintime']=$this->session['logintime'];
        $row['activetime']=$this->session['activetime'];
        $this->mysql->update($row,'where sid=/''.$this->session['sid'].'/'');
    }
    /*-------------------以下為私有方法------------------------------------------------------**/
    function create()
    {
            $nowtime=time();
            $sid=md5('0'.$nowtime.getip());//需要預先定義好getip()函數(shù):獲取客戶的IP地址
            setcookie($this->cookie_id,$sid,$nowtime+3600*24);//默認24小時
            $row['sid']=$sid;
            $row['uid']=0;
            $row['username']='guest';
            $row['ismember']=0;
            $row['logintime']=$nowtime;
            $row['activetime']=$nowtime;
            $this->mysql->add($row);//寫入數(shù)據(jù)庫
            $this->session=$row;
    }
}
?>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久治县| 富民县| 三江| 九龙坡区| 绥江县| 白朗县| 襄樊市| 鹤壁市| 平凉市| 濉溪县| 无锡市| 扎鲁特旗| 新干县| 聊城市| 施甸县| 松滋市| 黑山县| 炉霍县| 九龙坡区| 宜宾市| 定安县| 高阳县| 东光县| 手游| 喀什市| 工布江达县| 鸡西市| 五家渠市| 哈巴河县| 太仓市| 永清县| 天峻县| 久治县| 巩义市| 林西县| 衡山县| 项城市| 蓬溪县| 沾益县| 天柱县| 乌鲁木齐县|