Home > Backend Development > PHP Tutorial > Session sharing under PHP load balancing_PHP tutorial

Session sharing under PHP load balancing_PHP tutorial

WBOY
Release: 2016-07-13 10:36:30
Original
792 people have browsed it

Recently I have been busy developing the program for the fourth edition of Taiwan Sports Lottery, so I haven’t written anything for a long time. Today I just wrote something to share with you.

First let’s talk about load balancing. I believe everyone knows that load balancing can solve the problem of large website traffic. Load balancing is to distribute user requests to polymorphic PCs for processing. Since the request is distributed, the session needs to be Consider the processing method. Traditionally, PHP will store the session in the local temporary file. However, in this case, the session will be lost after distribution. In fact, the simplest solution is to use memcache to host it and set up a separate server. The server is used as a memcache server (it is best to have a larger memory), and the next work is left to the PHP code. I don’t want to modify php.ini here, because it would be too tiring to change it for each server, and I Lazy

Maybe you will tell me that you can write to memcache by directly modifying the session storage location of php.ini. Yes, that’s right, but this method cannot call gc to release the expired session, and today we are going to say The key is not only to allow it to be hosted, but also to allow it to automatically release the session.

Since you want to do it, you have to do it perfectly. Below is my code. If you don’t know how to read the comments yourself:

$_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();
Copy after login

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/738545.htmlTechArticleI have been busy developing the program for the fourth edition of Taiwan Sports Lottery recently, so I haven’t written anything for a long time. I will write whatever I want today Let me share something with you. First let’s talk about load balancing, I believe everyone is...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template