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生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
May 15 PHP
Fine Uploader文件上传组件应用介绍
Jan 06 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
php无限分类使用concat如何实现
Nov 05 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
May 14 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 编程安全性小结
2010/01/08 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
在线游戏大家来找茬II
2006/09/30 Javascript
用jquery来定位
2007/02/20 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Node.js的特点详解
2017/02/03 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
深入解析nodejs HTTP服务
2017/07/25 NodeJs
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
django-初始配置(纯手写)详解
2019/07/30 Python
中专毕业生的自我鉴定
2013/12/01 职场文书
工程负责人任命书
2014/06/06 职场文书
供电工程专业求职信
2014/08/09 职场文书
2015年药房工作总结
2015/04/25 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
婚庆答谢词大全
2015/09/29 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL