最近忙於開發台灣運動彩券第四版的程式,所以已經很久沒有上來寫東西了,今天隨便寫點東西和大家分享.
首先說一下負載均衡,相信大家都知道負載均衡可以很好地解決網站大流量的問題,負載均衡就是把用戶的請求分發到多態pc上進行處理,既然分發了請求那麼session就要考慮好處理方法.傳統情況下php會把session存入本機的暫存檔內,可是這種情況下分發了之後session就丟失了,其實最簡單的解決方法就是用memcache來託管,單獨架設一台服務器用來作為memcache服務器(內存最好是大一點),接下來的工作就交給PHP代碼來做就好了,這裡我不想修改php.ini,因為每台都改的話太累,而且我又比較懶
或許您會告訴我說直接修改一下php.ini的session存儲位置就能寫入memcache了,是,沒錯,但是這種方式卻不能調用gc釋放掉過期的會話,而今天我們要說的就是不但要讓他託管,還得讓他自動釋放會話.
既然要做,那就要做到完美才行,下邊是我的代碼,不懂得自己看註釋:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
$_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(); |