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 Undefined index和Undefined variable的解决方法
Mar 27 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
Apr 23 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中使用curl_init函数的说明
2010/11/02 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
文字幻灯片
2006/06/26 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
2012/11/14 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
Web打印解决方案之证件套打的实现思路
2016/08/29 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python实现数据库编程方法详解
2015/06/09 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
python使用KNN算法手写体识别
2018/02/01 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Python 加密与解密小结
2018/12/06 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python实现五子棋小程序
2019/06/18 Python
对python中的装包与解包实例详解
2019/08/24 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
职务任命书范本
2014/06/05 职场文书
工地质量标语
2014/06/12 职场文书
工伤事故赔偿协议书(标准)
2014/09/29 职场文书
作弊检讨书
2015/01/27 职场文书
源码分析Redis中 set 和 sorted set 的使用方法
2022/03/22 Redis