hedera-web/web/db-session-handler.php

60 lines
1.1 KiB
PHP
Raw Normal View History

2016-09-19 06:40:18 +00:00
<?php
namespace Vn\Web;
2016-09-23 22:47:34 +00:00
class DbSessionHandler implements \SessionHandlerInterface
2016-09-19 06:40:18 +00:00
{
private $db;
function __construct ($db)
{
$this->db = $db;
}
2016-10-17 17:01:23 +00:00
function open ($savePath, $name)
2016-09-19 06:40:18 +00:00
{
return TRUE;
}
2016-10-17 17:01:23 +00:00
function close ()
2016-09-19 06:40:18 +00:00
{
return TRUE;
}
function read ($sessionId)
{
2016-10-17 12:36:52 +00:00
$this->db->query ('DO GET_LOCK(#, 10)', [$sessionId]);
2016-09-23 22:47:34 +00:00
$sessionData = $this->db->getValue (
2016-10-17 12:36:52 +00:00
'SELECT data FROM userSession WHERE ssid = # FOR UPDATE', [$sessionId]);
2016-09-19 06:40:18 +00:00
return isset ($sessionData) ? $sessionData : '';
}
function write ($sessionId, $sessionData)
{
$this->db->query (
'INSERT INTO userSession SET
ssid = #, data = #, lastUpdate = NOW()
ON DUPLICATE KEY UPDATE
data = VALUES(data), lastUpdate = VALUES(lastUpdate)',
2016-09-19 06:40:18 +00:00
[$sessionId, $sessionData]);
2016-10-17 12:36:52 +00:00
$this->db->query ('DO RELEASE_LOCK(#)', [$sessionId]);
2016-09-19 06:40:18 +00:00
return TRUE;
}
2016-10-17 17:01:23 +00:00
function destroy ($sessionId)
{
$this->db->query ('DELETE FROM userSession WHERE ssid = #', [$sessionId]);
return TRUE;
}
function gc ($maxLifeTime)
{
$this->db->query ('DELETE FROM userSession
WHERE lastUpdate < TIMESTAMPADD(SECOND, -#, NOW())',
[$maxLifeTime]
);
return TRUE;
}
2016-09-19 06:40:18 +00:00
}