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的超時時間
)
); //託管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;
} /**
刪除
返回: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之負載均衡下的session共用的更多相关文章
- 负载均衡下 tomcat session 共享
概述 在分布式部署的情况下,每台tomcat 都会有自己的session ,这样如果 用户A 在tomcat1 下登录,在tomcat2 下并没有session信息.如果 tomcat1宕机,tomc ...
- LVS+Keepalived搭建MyCAT高可用負載均衡集群
1.前面我们已经搭建好mysql主主,并且用mycat实现双写功能,主要配置文件: [root@mycat2 conf]# cat schema.xml <?xml version=" ...
- 负载均衡中的session保持
什么叫负载均衡中的session保持 当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一 ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- Net分布式系统之二:CentOS系统搭建Nginx负载均衡(下)
上一篇文章介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 ...
- tomcat+nginx+redis实现均衡负载、session共享(一)
在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...
- linux+nginx+tomcat负载均衡,实现session同步
linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...
- 分布式集群下的Session存储方式窥探
传统的应用服务器,自身实现的session管理是大多是基于单机的,对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同的服务器之间跳转.那么,如何保持服务器之前的se ...
- 【转载】tomcat+nginx+redis实现均衡负载、session共享(一)
http://www.cnblogs.com/zhrxidian/p/5432886.html 在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一 ...
随机推荐
- N皇后
#include <stdio.h> #include <math.h> ], a[]; /*int place(int k) { for(int i = 1; i < ...
- 隐藏 input 标签的边框
css input 如何去掉点击后出现的边框:css文件里加:*:focus { outline: none; } 或 input {outline:none;} 去边框的方法如下 方法1: < ...
- Java 字符串用逗号并接
for (int t = 0; t < memberLen; t++) { memTemp = stafferMap.get(strMember[t]); if(memTemp != nul ...
- JAVA_BaseDAO数据处理类
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStat ...
- github 仓库管理
一.远程仓库有master和dev分支1. 克隆代码 git clone https://github.com/master-dev.git # 这个git路径是无效的,示例而已 2. 查看所有分支 ...
- wav文件格式分析(一)
(一)概述 WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范: (二)音频知识 1.常见的声音文 ...
- delphi 获取图片某一像素的颜色值
前言:在VCL里有GetPixel函数,可直接用,在FMX里直接用这个函数没有定义,在FMX的library中找这个函数在FMX.Graphics.TBitmapData.GetPixel中 结果我引 ...
- Makecert.exe(证书创建工具)
Makecert.exe(证书创建工具) .NET Framework 4.5 其他版本 2(共 3)对本文的评价是有帮助 - 评价此主题 证书创建工具生成仅用于测试目的的 X.509 证 ...
- spring MVC注解深入研究
@Controller @Service @Controller和 @Component注册一个action 到spring 上下文中,bean 的ID 默认为类名称开头字母小写.@Reposito ...
- [Hyper-V]使用操作系统模板创建新的虚拟机
描述: 为了节省空间和时间的目的,先在Hyper-V里创建一个干净的操作系统,以后再创建虚拟机时都基于此操作系统,节省了安装Windows的时间 另外创建其它虚拟机的时候,也以上述虚拟机的磁盘为基础盘 ...