Home > Backend Development > PHP Tutorial > Why don't I use session_PHP tutorial

Why don't I use session_PHP tutorial

WBOY
Release: 2016-07-13 17:36:26
Original
986 people have browsed it

 在考虑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 feifengxlq#gmail.com
* @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

http: //www.bkjia.com/PHPjc/508237.html

TechArticle

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template