当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-08 10:32:26 浏览: 评论:0 

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

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

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

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

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

  1. $_ENV=array
  2.   'SYS'=>array
  3.     'Memip'=>'127.0.0.1',      //MEMCACHE的ip 
  4.     'Mempt'=>11211,       //MEMCACHE的port 
  5.     'Memtim'=>10,          //MEMCACHE的超時時間 
  6.   ) 
  7. ); 
  8. //托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确 
  9. final class S{ 
  10.   public static function open(){ 
  11.   //禁止session自动开启 
  12.     session_write_close(); 
  13.   ini_set('session.auto_start',0); 
  14.   //使用五十分之一的概率启动gc清理会话 
  15.   ini_set('session.gc_probability',1); 
  16.   ini_set('session.gc_divisor',50); 
  17.   ini_set('session.use_cookies',1); 
  18.   //session的寿命 
  19.   //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']); 
  20.   //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']); 
  21.   //ini_set('session.save_handler','files'); 
  22.   //ini_set('session.save_path',Run.'_tmp'); 
  23.   //ini_set('session.save_handler','memcache'); 
  24.   //ini_set('session.save_path','tcp://127.0.0.1:11211'); 
  25.     //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime'); 
  26.   //建立memcache对象 
  27.   $_ENV['S_mem']=new Memcache; 
  28.   $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!'); 
  29.     return TRUE; 
  30.   } 
  31.   /** 
  32.     读取 
  33.     返回:读到的內容 
  34.   /**/ 
  35.   public static function read($id){ 
  36.     return $_ENV['S_mem']->get('s_'.$id); 
  37.   } 
  38.   /** 
  39.     写入 
  40.     返回:bool 
  41.   /**/ 
  42.   public static function write($id,$data){ 
  43.     return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']); 
  44.   } 
  45.   /** 
  46.     关闭 
  47.     返回:bool 
  48.   /**/ 
  49.   public static function close(){ 
  50.     $_ENV['S_mem']->close(); 
  51.     unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']); 
  52.     return TRUE; 
  53.   } 
  54.   /** 
  55.     刪除 
  56.     返回:bool 
  57.   /**/ 
  58.   public static function destroy($id){ 
  59.     return $_ENV['S_mem']->delete('s_'.$id); 
  60.   } 
  61.   /** 
  62.     清理 
  63.     返回:bool 
  64.   /**/ 
  65.   public static function gc(){ 
  66.     return TRUE; 
  67.   } 
  68. session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc'); 
  69. $_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id(); 
  70. if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);} 
  71. session_start();

Tags: PHP负载均衡 session共用

分享到: