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 相关文章推荐
php5 mysql分页实例代码
Apr 10 PHP
Snoopy类使用小例子
Apr 15 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
PHP编程计算日期间隔天数的方法
Apr 26 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
PHP新手上路(九)
2006/10/09 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
基于JSON数据格式详解
2017/08/31 Javascript
Vuejs实现购物车功能
2017/11/05 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
Python脚本实现虾米网签到功能
2016/04/12 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
解析python的局部变量和全局变量
2019/08/15 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
公务员转正考察材料
2014/02/07 职场文书
财务工作检讨书
2014/10/29 职场文书
公司禁烟通知
2015/04/23 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
nginx结合openssl实现https的方法
2021/07/25 Servers
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
讨论nginx location 顺序问题
2022/05/30 Servers