php 不用session,我为什么不使用session_PHP教程

在考虑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:feifengxlqfeifengxlq#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.}

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;

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值