当前位置:Gxlcms > PHP教程 > PHP实现负载均衡下的session共用案列详解(附代码)

PHP实现负载均衡下的session共用案列详解(附代码)

时间:2021-07-01 10:21:17 帮助过:8人阅读

这次给大家带来PHP实现负载均衡下的session共用案列详解(附代码),PHP实现负载均衡下的session共用的注意事项有哪些,下面就是实战案例,一起来看一下。

首先说一下负载均衡,相信大家都知道负载均衡可以很好地解决网站大流量的问题,负载均衡就是把用户的请求分发到多态pc上进行处理,既然分发了请求那么session就要考虑好处理方法.传统情况下php会把session存入本机的暂存档内,可是这种情况下分发了之后session就丢失了,其实最简单的解决方法就是用memcache来托管,单独架设一台服务器用来作为memcache服务器(内存最好是大一点),接下来的工作就交给PHP代码来做就好了,这裡我不想修改php.ini,因为每台都改的话太累,而且我又比较懒

或许您会告诉我说直接修改一下php.ini的session存储位置就能写入memcache了,是,没错,但是这种方式却不能调用gc释放掉过期的会话,而今天我们要说的就是不但要让他托管,还得让他自动释放会话.

既然要做,那就要做到完美才行,下边是我的代码,不懂得自己看注释:

  1. $_ENV=array(
  2. 'SYS'=>array(
  3. 'Memip'=>'127.0.0.1', //MEMCACHE的ip
  4. 'Mempt'=>11211, //MEMCACHE的port
  5. 'Memtim'=>10, //MEMCACHE的超時時間
  6. )
  7. );
  8. //托管SESSION到MEMCACHE,如果开启失败,则说明MEMCACHE没有配置正确
  9. final class S{
  10. public static function open(){
  11. //禁止session自动开启
  12. session_write_close();
  13. ini_set('session.auto_start',0);
  14. //使用五十分之一的概率启动gc清理会话
  15. ini_set('session.gc_probability',1);
  16. ini_set('session.gc_pisor',50);
  17. ini_set('session.use_cookies',1);
  18. //session的寿命
  19. //ini_set('session.gc_maxlifetime',$_ENV['SYS']['Memtim']);
  20. //ini_set('session.cookie_lifetime',$_ENV['SYS']['Memtim']);
  21. //ini_set('session.save_handler','files');
  22. //ini_set('session.save_path',Run.'_tmp');
  23. //ini_set('session.save_handler','memcache');
  24. //ini_set('session.save_path','tcp://127.0.0.1:11211');
  25. //$_ENV['S_tim'] = ini_get('session.gc_maxlifetime');
  26. //建立memcache对象
  27. $_ENV['S_mem']=new Memcache;
  28. $_ENV['S_mem']->connect($_ENV['SYS']['Memip'],$_ENV['SYS']['Mempt']) or die('Memcache連接失敗!');
  29. return TRUE;
  30. }
  31. /**
  32. 读取
  33. 返回:读到的內容
  34. /**/
  35. public static function read($id){
  36. return $_ENV['S_mem']->get('s_'.$id);
  37. }
  38. /**
  39. 写入
  40. 返回:bool
  41. /**/
  42. public static function write($id,$data){
  43. return $_ENV['S_mem']->set('s_'.$id,$data,MEMCACHE_COMPRESSED,$_ENV['SYS']['Memtim']);
  44. }
  45. /**
  46. 关闭
  47. 返回:bool
  48. /**/
  49. public static function close(){
  50. $_ENV['S_mem']->close();
  51. unset($_ENV['S_mem'],$_ENV['SYS']['Memtim']);
  52. return TRUE;
  53. }
  54. /**
  55. 刪除
  56. 返回:bool
  57. /**/
  58. public static function destroy($id){
  59. return $_ENV['S_mem']->delete('s_'.$id);
  60. }
  61. /**
  62. 清理
  63. 返回:bool
  64. /**/
  65. public static function gc(){
  66. return TRUE;
  67. }
  68. }
  69. session_set_save_handler('S::open','S::close','S::read','S::write','S::destroy','S::gc');
  70. $_ENV['sessionid']=(isset($_REQUEST['sessionid'])) ? trim($_REQUEST["sessionid"]) : session_id();
  71. if($_ENV['sessionid']!=''){session_id($_ENV['sessionid']);}
  72. session_start();

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

php-app开发接口加密使用步骤详解

php curl带有csrf-token验证模拟提交实例详解

以上就是PHP实现负载均衡下的session共用案列详解(附代码)的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行