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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
PHP $_SERVER详解
Jan 16 PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
php猜单词游戏
Sep 29 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 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
社区(php&&mysql)六
2006/10/09 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
window.parent调用父框架时 ie跟火狐不兼容问题
2009/07/30 Javascript
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
Python装饰器基础概念与用法详解
2018/12/22 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
基于HTML5的WebSocket的实例代码
2018/08/15 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
致接力运动员广播稿
2014/02/17 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
合作合同协议书范本
2015/01/27 职场文书
教师个人学习总结
2015/02/11 职场文书
安全教育片观后感
2015/06/17 职场文书
创业计划书介绍
2019/04/24 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
Win11 Build 25179预览版发布(附更新内容+ISO官方镜像下载)
2022/08/14 数码科技