class
MySessionHandler
implements
SessionHandlerInterface {
private
$_dbLink
;
Private
$_sessionTable
;
private
$_sessionName
;
const
SESSION_EXPIRE = 10;
public
function
__construct(
$dbLink
,
$sessionTable
) {
if
(!
is_object
(
$dbLink
)) {
return
false;
}
$this
->_dbLink =
$dbLink
;
$this
->_sessionTable =
$sessionTable
;
}
public
function
open(
$session_save_path
,
$session_name
) {
$this
->_sessionName =
$session_name
;
return
0;
}
public
function
close() {
return
0;
}
public
function
read(
$session_id
) {
$query
=
"SELECT value FROM {$this->_sessionTable} WHERE sid = {$session_id} AND UNIX_TIMESTAMP(expiration) + "
. self::SESSION_EXPIRE .
" > UNIX_TIMESTAMP(NOW())"
;
$result
=
$this
->_dbLink->query(
$query
);
if
(!isset(
$value
) ||
empty
(
$value
)) {
$value
=
""
;
return
$value
;
}
$this
->_dbLink->query(
"UPDATE {$this->_sessionTable} SET expiration = CURRENT_TIMESTAMP() WHERE sid = {$session_id}"
);
$value
=
$result
->fetch_array();
$result
->free();
return
$value
[
'value'
];
}
public
function
write(
$session_id
,
$session_data
) {
$query
=
"SELECT value FROM {$this->_sessionTable} WHERE sid = '{$session_id}' AND UNIX_TIMESTAMP(expiration) + "
. self::SESSION_EXPIRE .
" > UNIX_TIMESTAMP(NOW())"
;
$result
=
$this
->_dbLink->query(
$query
);
$result
=
$result
->fetch_array();
if
(!
empty
(
$result
)) {
$result
=
$this
->_dbLink->query(
"UPDATE {$this->_sessionTable} SET value = {$session_data} WHERE sid = {$session_id}"
);
}
else
{
$result
=
$this
->_dbLink->query(
"INSERT INTO {$this->_sessionTable} (sid, value) VALUES ('{$session_id}', '{$session_data}')"
);
}
if
(
$result
){
return
0;
}
else
{
return
1;
}
}
public
function
destroy(
$session_id
) {
$result
=
$this
->_dbLink->query(
"DELETE FROM {$this->_sessionTable} WHERE sid = '{$session_id}'"
);
if
(
$result
){
return
0;
}
else
{
return
1;
}
}
public
function
gc(
$maxlifetime
) {
$result
=
$this
->_dbLink->query(
"DELETE FROM {$this->_sessionTable} WHERE UNIX_TIMESTAMP(expiration) < UNIX_TIMESTAMP(NOW()) - "
. self::SESSION_EXPIRE);
if
(
$result
){
return
0;
}
else
{
return
1;
}
}
}