分享
 
 
 

我为什么不使用session

王朝other·作者佚名  2008-12-22
窄屏简体版  字體: |||超大  

在考虑session的问题上,我最终放弃了session:

1、原本的session是使用文件来管理的。文件系统的好坏直接影响session的性能,尤其当有几K人同时在线的时候,尤其突出。解决方法有两个:数据库和文件(使用哈希路径)。

2、原有session的扩展性和可控制性不好。不利于结合我现有的系统。

3、在选用数据库的时候,我并没有选择sqlite,上次我测试sqlite效率在win xp上效率没有想象中的好。

最后我选择了myql的heap表来处理session,并且把session处理和online在线用户统计结合起来。

下面给出代码为我的一个实例(没提供其他的细节了,具体使用要相应修改)

<?

/**

* 处理在线用户和对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的过滤,一些基本函数和数据库操作类

*/

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已经存在,检查是否存在数据库中

$sid=$_COOKIE[$this->cookie_id];

if($this->mysql->detail('where sid=\''.$sid.'\''))

{

//存在数据库中

$row['activetime']=time();

$this->mysql->update($row,'where sid=\''.$sid.'\'');

$this->session=$this->mysql->detail('where sid=\''.$sid.'\'');

}else{

//不存在数据库中

$this->create();

}

}

//删除数据库中不在线的用户

$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];

}

}

//更新数据库里面的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()函数:获取客户的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);//写入数据库

$this->session=$row;

}

}

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有