首页 > 语言 > PHP > 正文

PHP实现负载均衡下的session共用功能

2024-05-05 00:03:15
字体:
来源:转载
供稿:网友

本文实例讲述了PHP实现负载均衡下的session共用功能。分享给大家供大家参考,具体如下:

最近忙于开发台湾运动彩券第四版的程序,所以已经很久没有上来写东西了,今天随便写点东西和大家分享.

首先说一下负载均衡,相信大家都知道负载均衡可以很好地解决网站大流量的问题,负载均衡就是把用户的请求分发到多态pc上进行处理,既然分发了请求那么session就要考虑好处理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工作就交给PHP代码来做就好了,这裡我不想修改php.ini,因为每台都改的话太累,而且我又比较懒

或许您会告诉我说直接修改一下php.ini的session存储位置就能写入memcache了,是,没错,但是这种方式却不能调用gc释放掉过期的会话,而今天我们要说的就是不但要让他托管,还得让他自动释放会话.

既然要做,那就要做到完美才行,下边是我的代码,不懂得自己看注释:

$_ENV=array(  'SYS'=>array(    'Memip'=>'127.0.0.1',      //MEMCACHE的ip    'Mempt'=>11211,       //MEMCACHE的port    'Memtim'=>10,          //MEMCACHE的超時時間  ));//托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确final class S{  public static function open(){  //禁止session自动开启    session_write_close();  ini_set('session.auto_start',0);  //使用五十分之一的概率启动gc清理会话  ini_set('session.gc_probability',1);  ini_set('session.gc_divisor',50);  ini_set('session.use_cookies',1);  //session的寿命  //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);  //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);  //ini_set('session.save_handler','files');  //ini_set('session.save_path',Run.'_tmp');  //ini_set('session.save_handler','memcache');  //ini_set('session.save_path','tcp://127.0.0.1:11211');    //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');  //建立memcache对象  $_ENV['S_mem']=new Memcache;  $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');    return TRUE;  }  /**    读取    返回:读到的內容  /**/  public static function read($id){    return $_ENV['S_mem']->get('s_'.$id);  }  /**    写入    返回:bool  /**/  public static function write($id,$data){    return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);  }  /**    关闭    返回:bool  /**/  public static function close(){    $_ENV['S_mem']->close();    unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);    return TRUE;  }  /**    刪除    返回:bool  /**/  public static function destroy($id){    return $_ENV['S_mem']->delete('s_'.$id);  }  /**    清理    返回:bool  /**/  public static function gc(){    return TRUE;  }}session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');$_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}session_start();

希望本文所述对大家PHP程序设计有所帮助。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选