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设计模式 FlyWeight (享元模式)
Jun 26 PHP
input file获得文件根目录简单实现
Apr 26 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
yii2 上传图片的示例代码
Nov 02 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 PHP
PHP预定义接口――Iterator用法示例
Jun 05 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
Python的条件语句与运算符优先级详解
2015/10/13 Python
python如何生成网页验证码
2018/07/28 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Python函数中参数是传递值还是引用详解
2019/07/02 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
如何提高python 中for循环的效率
2020/04/15 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
如何利用python进行时间序列分析
2020/08/04 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
违反课堂纪律检讨书
2014/01/19 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
中学生学习保证书
2015/02/26 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers