PHP實現負載平衡下的session共用案列詳解(附代碼)

來源:互聯網
上載者:User
這次給大家帶來PHP實現負載平衡下的session共用案列詳解(附代碼),PHP實現負載平衡下的session共用的注意事項有哪些,下面就是實戰案例,一起來看一下。

首先說一下負載平衡,相信大家都知道負載平衡可以很好地解決網站大流量的問題,負載平衡就是把使用者的請求分發到多態pc上進行處理,既然分發了請求那麼session就要考慮好處理方法.傳統情況下php會把session存入原生暫存檔內,可是這種情況下分發了之後session就丟失了,其實最簡單的解決方案就是用memcache來託管,單獨架設一台伺服器用來作為memcache伺服器(記憶體最好是大一點),接下來的工作就交給PHP代碼來做就好了,這裡我不想修改php.ini,因為每台都改的話太累,而且我又比較懶

或許您會告訴我說直接修改一下php.ini的session儲存位置就能寫入memcache了,是,沒錯,但是這種方式卻不能調用gc釋放掉到期的會話,而今天我們要說的就是不但要讓他託管,還得讓他自動釋放會話.

既然要做,那就要做到完美才行,下邊是My Code,不懂得自己看注釋:

$_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中文網其它相關文章!

推薦閱讀:

php-app開發介面加密使用步驟詳解

php curl帶有csrf-token驗證類比提交執行個體詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.