Home >Backend Development >PHP Tutorial >Why don't I use session_PHP tutorial
在考虑session的问题上,我最终放弃了session: 最后我选择了myql的heap表来处理session,并且把session处理和online在线用户统计结合起来。 下面给出代码为我的一个实例(没提供其他的细节了,具体使用要相应修改) `sid` char( 32 ) NOT NULL ,
1、原本的session是使用文件来管理的。文件系统的好坏直接影响session的性能,尤其当有几K人同时在线的时候,尤其突出。解决方法有两个:数据库和文件(使用哈希路径)。
2、原有session的扩展性和可控制性不好。不利于结合我现有的系统。
3、在选用数据库的时候,我并没有选择sqlite,上次我测试sqlite效率在win xp上效率没有想象中的好。
/**
* 处理在线用户和对session的模拟
* CREATE TABLE `webqq_session` (
`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
* @since:2006-10-23
* @copyright:http://www.phpobject. net
* Note: The use of this file must be combined with other files: such as cookie filtering, some basic functions and database operation classes
*/
class session
{
var $mysql ;
var $cookie_id=webqq_sid;
var $session=array();
var $max_time=1200;//The default maximum time is 20 minutes
function __construct()
{
$this->mysql=new module(TB_PREX._session);//Requires external support
$this->start();
}
function start()
{
if(empty($_COOKIE[$this->cookie_id]))
{
//Initialize session
$this- >create();
}else{
->mysql->detail(where sid=.$sid.))
this-> ;mysql->update($row,where sid=.$sid.);
}
Delete users who are not online in the database
$ 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];
}
}
//Update the session information in the database
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].);
}
/*-------------------The following are private methods------------------ ------------------------------------**/
function create()
{
$nowtime=time();
$sid=md5(0.$nowtime.getip());//The getip() function needs to be defined in advance: get the customer’s IP address
setcookie($ this->cookie_id,$sid,$nowtime+3600*24);//Default 24 hours
[username]=guest;
$row[ismember]=0; ->add($row);//Write to database
http://www.bkjia.com/PHPjc/508237.html
www.bkjia.com
true
TechArticle