<?php
|
class LtSessionSqlite implements LtSessionStore
|
{
|
public $conf;
|
|
private $lifeTime; //session.gc_maxlifetime
|
private $dbHandle;
|
private $dbName;
|
private $tableName;
|
|
public function __construct()
|
{
|
// --
|
}
|
public function init()
|
{
|
if (isset($this->conf['gc_maxlifetime']))
|
{
|
$this->lifeTime = $this->conf['gc_maxlifetime'];
|
}
|
else
|
{
|
$this->lifeTime = get_cfg_var("session.gc_maxlifetime");
|
}
|
if (isset($this->conf['table_name']))
|
{
|
$this->tableName = $this->conf['table_name'];
|
}
|
else
|
{
|
$this->tableName = 'lotus_session';
|
}
|
if (isset($this->conf['db_name']))
|
{
|
$this->dbName = $this->conf['db_name'];
|
}
|
else
|
{
|
$this->dbName = '/tmp/Lotus/session/session_sqlite2.db';
|
}
|
|
if (!$this->dbHandle = sqlite_open($this->dbName, 0666))
|
{
|
trigger_error('session sqlite db error');
|
return false;
|
}
|
return true;
|
}
|
|
public function open($savePath, $sessName)
|
{
|
return true;
|
}
|
|
public function close()
|
{
|
$this->gc($this->lifeTime);
|
return @sqlite_close($this->dbHandle);
|
}
|
|
public function read($sessID)
|
{
|
$res = sqlite_query("SELECT session_data AS d FROM $this->tableName
|
WHERE session_id = '$sessID'
|
AND session_expires > " . time(), $this->dbHandle);
|
if ($row = sqlite_fetch_array($res, SQLITE_ASSOC))
|
{
|
return $row['d'];
|
}
|
else
|
{
|
return "";
|
}
|
}
|
|
public function write($sessID, $sessData)
|
{
|
$newExp = time() + $this->lifeTime;
|
$res = sqlite_query("SELECT * FROM $this->tableName
|
WHERE session_id = '$sessID'", $this->dbHandle);
|
if (sqlite_num_rows($res))
|
{
|
sqlite_exec("UPDATE $this->tableName
|
SET session_expires = '$newExp',
|
session_data = '$sessData'
|
WHERE session_id = '$sessID'", $this->dbHandle);
|
if (sqlite_changes($this->dbHandle))
|
{
|
return true;
|
}
|
}
|
else
|
{
|
sqlite_exec("INSERT INTO $this->tableName (
|
session_id,
|
session_expires,
|
session_data)
|
VALUES(
|
'$sessID',
|
'$newExp',
|
'$sessData')", $this->dbHandle);
|
if (sqlite_changes($this->dbHandle))
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
|
public function destroy($sessID)
|
{
|
sqlite_exec("DELETE FROM $this->tableName WHERE session_id = '$sessID'", $this->dbHandle);
|
if (sqlite_changes($this->dbHandle))
|
{
|
return true;
|
}
|
return false;
|
}
|
|
public function gc($sessMaxLifeTime)
|
{
|
sqlite_exec("DELETE FROM $this->tableName WHERE session_expires < " . time(), $this->dbHandle);
|
return sqlite_changes($this->dbHandle);
|
}
|
|
public function runOnce()
|
{
|
$sql = "SELECT name FROM sqlite_master WHERE type='table' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='table' AND name='" . $this->tableName . "'";
|
$res = sqlite_query($sql, $this->dbHandle);
|
$row = sqlite_fetch_array($res, SQLITE_ASSOC);
|
if (empty($row))
|
{
|
$sql = "CREATE TABLE $this->tableName (
|
[session_id] VARCHAR(255) NOT NULL PRIMARY KEY,
|
[session_expires] INTEGER DEFAULT '0' NOT NULL,
|
[session_data] TEXT NULL
|
)";
|
return sqlite_exec($sql, $this->dbHandle);
|
}
|
return false;
|
}
|
}
|