这次给大家带来php实现负载均衡下的session共用案列详解(附代码),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_pisor',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-app开发接口加密使用步骤详解
php curl带有csrf-token验证模拟提交实例详解
以上就是php实现负载均衡下的session共用案列详解(附代码)的详细内容。