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


Posted in PHP onApril 17, 2018

本文实例讲述了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的超?r?r?
  )
);
//托管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;
  }
  /**
    ?h除
    返回: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 相关文章推荐
PHP 在线翻译函数代码
May 07 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
php编程每天必学之验证码
Mar 03 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
php制作基于xml的RSS订阅源功能示例
Feb 08 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
PHP代码重构方法漫谈
Apr 17 #PHP
php微信公众号开发之现金红包
Apr 16 #PHP
PHP闭包定义与使用简单示例
Apr 13 #PHP
PHP简单实现正则匹配省市区的方法
Apr 13 #PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 #PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 #PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 #PHP
You might like
PHPMyAdmin 快速配置方法
2009/05/11 PHP
PHP编程函数安全篇
2013/01/08 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
详解webpack 如何集成第三方js库
2017/06/29 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
JavaScript生成简单等差数列
2017/11/28 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
python3获取当前文件的上一级目录实例
2018/04/26 Python
python实现图片中文字分割效果
2019/07/22 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
与UNIX有关的几个名词
2015/09/17 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
外贸业务员工作职责
2014/01/06 职场文书
学生会主席竞聘书
2014/03/31 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
银行委托书范本
2014/09/28 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL