> php教程 > php手册 > 본문

PHP之負載均衡下的session共用

WBOY
풀어 주다: 2016-06-06 19:45:49
원래의
1629명이 탐색했습니다.

最近忙於開發台灣運動彩券第四版的程式,所以已經很久沒有上來寫東西了,今天隨便寫點東西和大家分享. 首先說一下負載均衡,相信大家都知道負載均衡可以很好地解決網站大流量的問題,負載均衡就是把用戶的請求分發到多態pc上進行處理,既然分發了請求那麼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.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿