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面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP实时显示输出
Oct 02 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
Laravel实现用户注册和登录
Jan 23 PHP
php延迟静态绑定实例分析
Feb 08 PHP
php清除和销毁session的方法分析
Mar 19 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
php下实现伪 url 的超简单方法[转]
2007/09/24 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
几种响应式文字详解
2017/05/19 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
复习Python中的字符串知识点
2015/04/14 Python
图解Python变量与赋值
2018/04/03 Python
python3 实现对图片进行局部切割的方法
2018/12/05 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
python3 map函数和filter函数详解
2019/08/26 Python
python 决策树算法的实现
2020/10/09 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
学生学习总结的自我评价
2013/10/22 职场文书
区域销售经理岗位职责
2013/12/10 职场文书
财务管理职业生涯规划范文
2013/12/27 职场文书
出国留学计划书
2014/04/27 职场文书
新农村建设汇报材料
2014/08/15 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
党员年度个人总结
2015/02/14 职场文书
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers