@@ -38,7 +38,7 @@ class SessionDb {
38
38
/**
39
39
* 数据库句柄
40
40
*/
41
- protected $ hander ;
41
+ protected $ hander = array () ;
42
42
43
43
/**
44
44
* 打开Session
@@ -49,8 +49,58 @@ class SessionDb {
49
49
public function open ($ savePath , $ sessName ) {
50
50
$ this ->lifeTime = C ('SESSION_EXPIRE ' )?C ('SESSION_EXPIRE ' ):ini_get ('session.gc_maxlifetime ' );
51
51
$ this ->sessionTable = C ('SESSION_TABLE ' )?C ('SESSION_TABLE ' ):C ("DB_PREFIX " )."session " ;
52
- $ hander = mysql_connect (C ('DB_HOST ' ),C ('DB_USER ' ),C ('DB_PWD ' ));
53
- $ dbSel = mysql_select_db (C ('DB_NAME ' ),$ hander );
52
+ //分布式数据库
53
+ $ host = explode (', ' ,C ('DB_HOST ' ));
54
+ $ port = explode (', ' ,C ('DB_PORT ' ));
55
+ $ name = explode (', ' ,C ('DB_NAME ' ));
56
+ $ user = explode (', ' ,C ('DB_USER ' ));
57
+ $ pwd = explode (', ' ,C ('DB_PWD ' ));
58
+ if (1 == C ('DB_DEPLOY_TYPE ' )){
59
+ //读写分离
60
+ if (C ('DB_RW_SEPARATE ' )){
61
+ $ w = floor (mt_rand (0 ,C ('DB_MASTER_NUM ' )-1 ));
62
+ if (is_numeric (C ('DB_SLAVE_NO ' ))){//指定服务器读
63
+ $ r = C ('DB_SLAVE_NO ' );
64
+ }else {
65
+ $ r = floor (mt_rand (C ('DB_MASTER_NUM ' ),count ($ host )-1 ));
66
+ }
67
+ //主数据库链接
68
+ $ hander = mysql_connect (
69
+ $ host [$ w ].(isset ($ port [$ w ])?': ' .$ port [$ w ]:': ' .$ port [0 ]),
70
+ isset ($ user [$ w ])?$ user [$ w ]:$ user [0 ],
71
+ isset ($ pwd [$ w ])?$ pwd [$ w ]:$ pwd [0 ]
72
+ );
73
+ $ dbSel = mysql_select_db (
74
+ isset ($ name [$ w ])?$ name [$ w ]:$ name [0 ]
75
+ ,$ hander );
76
+ if (!$ hander || !$ dbSel )
77
+ return false ;
78
+ $ this ->hander [0 ] = $ hander ;
79
+ //从数据库链接
80
+ $ hander = mysql_connect (
81
+ $ host [$ r ].(isset ($ port [$ r ])?': ' .$ port [$ r ]:': ' .$ port [0 ]),
82
+ isset ($ user [$ r ])?$ user [$ r ]:$ user [0 ],
83
+ isset ($ pwd [$ r ])?$ pwd [$ r ]:$ pwd [0 ]
84
+ );
85
+ $ dbSel = mysql_select_db (
86
+ isset ($ name [$ r ])?$ name [$ r ]:$ name [0 ]
87
+ ,$ hander );
88
+ if (!$ hander || !$ dbSel )
89
+ return false ;
90
+ $ this ->hander [1 ] = $ hander ;
91
+ return true ;
92
+ }
93
+ }
94
+ //从数据库链接
95
+ $ r = floor (mt_rand (0 ,count ($ host )-1 ));
96
+ $ hander = mysql_connect (
97
+ $ host [$ r ].(isset ($ port [$ r ])?': ' .$ port [$ r ]:': ' .$ port [0 ]),
98
+ isset ($ user [$ r ])?$ user [$ r ]:$ user [0 ],
99
+ isset ($ pwd [$ r ])?$ pwd [$ r ]:$ pwd [0 ]
100
+ );
101
+ $ dbSel = mysql_select_db (
102
+ isset ($ name [$ r ])?$ name [$ r ]:$ name [0 ]
103
+ ,$ hander );
54
104
if (!$ hander || !$ dbSel )
55
105
return false ;
56
106
$ this ->hander = $ hander ;
@@ -61,8 +111,12 @@ public function open($savePath, $sessName) {
61
111
* 关闭Session
62
112
* @access public
63
113
*/
64
- public function close () {
65
- $ this ->gc (ini_get ('session.gc_maxlifetime ' ));
114
+ public function close () {
115
+ if (is_array ($ this ->hander )){
116
+ $ this ->gc ($ this ->lifeTime );
117
+ return (mysql_close ($ this ->hander [0 ]) && mysql_close ($ this ->hander [1 ]));
118
+ }
119
+ $ this ->gc ($ this ->lifeTime );
66
120
return mysql_close ($ this ->hander );
67
121
}
68
122
@@ -72,7 +126,8 @@ public function close() {
72
126
* @param string $sessID
73
127
*/
74
128
public function read ($ sessID ) {
75
- $ res = mysql_query ("SELECT session_data AS data FROM " .$ this ->sessionTable ." WHERE session_id = ' $ sessID' AND session_expire > " .time (),$ this ->hander );
129
+ $ hander = is_array ($ this ->hander )?$ this ->hander [1 ]:$ this ->hander ;
130
+ $ res = mysql_query ("SELECT session_data AS data FROM " .$ this ->sessionTable ." WHERE session_id = ' $ sessID' AND session_expire > " .time (),$ hander );
76
131
if ($ res ) {
77
132
$ row = mysql_fetch_assoc ($ res );
78
133
return $ row ['data ' ];
@@ -87,9 +142,10 @@ public function read($sessID) {
87
142
* @param String $sessData
88
143
*/
89
144
public function write ($ sessID ,$ sessData ) {
145
+ $ hander = is_array ($ this ->hander )?$ this ->hander [0 ]:$ this ->hander ;
90
146
$ expire = time () + $ this ->lifeTime ;
91
- mysql_query ("REPLACE INTO " .$ this ->sessionTable ." ( session_id, session_expire, session_data) VALUES( ' $ sessID', ' $ expire', ' $ sessData') " ,$ this -> hander );
92
- if (mysql_affected_rows ($ this -> hander ))
147
+ mysql_query ("REPLACE INTO " .$ this ->sessionTable ." ( session_id, session_expire, session_data) VALUES( ' $ sessID', ' $ expire', ' $ sessData') " ,$ hander );
148
+ if (mysql_affected_rows ($ hander ))
93
149
return true ;
94
150
return false ;
95
151
}
@@ -100,8 +156,9 @@ public function write($sessID,$sessData) {
100
156
* @param string $sessID
101
157
*/
102
158
public function destroy ($ sessID ) {
103
- mysql_query ("DELETE FROM " .$ this ->sessionTable ." WHERE session_id = ' $ sessID' " ,$ this ->hander );
104
- if (mysql_affected_rows ($ this ->hander ))
159
+ $ hander = is_array ($ this ->hander )?$ this ->hander [0 ]:$ this ->hander ;
160
+ mysql_query ("DELETE FROM " .$ this ->sessionTable ." WHERE session_id = ' $ sessID' " ,$ hander );
161
+ if (mysql_affected_rows ($ hander ))
105
162
return true ;
106
163
return false ;
107
164
}
@@ -112,20 +169,21 @@ public function destroy($sessID) {
112
169
* @param string $sessMaxLifeTime
113
170
*/
114
171
public function gc ($ sessMaxLifeTime ) {
115
- mysql_query ("DELETE FROM " .$ this ->sessionTable ." WHERE session_expire < " .time (),$ this ->hander );
116
- return mysql_affected_rows ($ this ->hander );
172
+ $ hander = is_array ($ this ->hander )?$ this ->hander [0 ]:$ this ->hander ;
173
+ mysql_query ("DELETE FROM " .$ this ->sessionTable ." WHERE session_expire < " .time (),$ hander );
174
+ return mysql_affected_rows ($ hander );
117
175
}
118
176
119
177
/**
120
178
* 打开Session
121
179
* @access public
122
180
*/
123
181
public function execute () {
124
- session_set_save_handler (array (&$ this ,"open " ),
182
+ session_set_save_handler (array (&$ this ,"open " ),
125
183
array (&$ this ,"close " ),
126
184
array (&$ this ,"read " ),
127
185
array (&$ this ,"write " ),
128
186
array (&$ this ,"destroy " ),
129
187
array (&$ this ,"gc " ));
130
188
}
131
- }
189
+ }
0 commit comments