爱程序网

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();

相关文章列表: