• 技术文章 >后端开发 >php教程

    PHP实现负载均衡下的session共用案列详解(附代码)

    php中世界最好的语言php中世界最好的语言2018-05-16 15:52:50原创1487
    这次给大家带来PHP实现负载均衡下的session共用案列详解(附代码),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_pisor',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-app开发接口加密使用步骤详解

    php curl带有csrf-token验证模拟提交实例详解

    以上就是PHP实现负载均衡下的session共用案列详解(附代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:session php 共用
    上一篇:php无限级评论嵌套实现步骤详解 下一篇:PHP代码重构方法总结归纳
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何使用xlswriter进行大数据的导入导出?(详解)• PHP中的一些经验积累_PHP教程• 解析PHP连接MYSQL的两种方法(1)_PHP教程• PHP+MySQL视频教程_PHP教程• 详细解读PHP解析XML元素结构的代码示例_PHP教程
    1/1

    PHP中文网