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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP反向代理类代码
Aug 15 PHP
CodeIgniter视图使用注意事项
Jan 20 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
实例化php类时传参的方法分析
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
php导出中文内容excel文件类实例
2015/07/06 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
Python全局变量操作详解
2015/04/14 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
transform python环境快速配置方法
2018/09/27 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
详解Python 中的容器 collections
2020/08/17 Python
python安装sklearn模块的方法详解
2020/11/28 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
HTML5标签大全
2016/11/23 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
《小小竹排画中游》教学反思
2014/02/26 职场文书
租房协议书
2014/04/10 职场文书
施工安全承诺书
2014/05/22 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书