<?php /** * Broker * @package Broker */ namespace Broker; /** * Session handler */ class Session extends Database implements \SessionHandlerInterface { /** * Constructor * * @param string $directory */ public function __construct($directory) { parent::__construct($directory, null, "session"); @unlink($directory."sessions"); } /** * Initialize */ public function init() { $sql = "CREATE TABLE IF NOT EXISTS session( id INTEGER PRIMARY KEY ASC, sid TEXT NOT NULL UNIQUE, data TEXT, created TEXT NOT NULL, updated TEXT NOT NULL);"; $query = $this->database->prepare ( $sql ); $query->execute (); unset ( $query ); } /** * Destruct */ public function __destruct() { //session_write_close ( ); } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::close() */ public function close() { $this->database = null; return true; } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::destroy() * @param string $session_id */ public function destroy($session_id) { $sql = "DELETE FROM session WHERE sid = :sid"; $query = $this->database->prepare ( $sql ); $query->bindValue ( ":sid", $session_id ); return $query->execute (); } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::gc() * @param number $maxlifetime */ public function gc($maxlifetime) { $sql = "DELETE FROM session WHERE updated < datetime('now', '-" . intval ( $maxlifetime ) . " seconds')"; $query = $this->database->prepare ( $sql ); return $query->execute (); } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::open() * @param string $save_path * @param string $session_name */ public function open($save_path, $session_name) { return $this->database != null; } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::read() * @param string $session_id */ public function read($session_id) { $sql = "SELECT data FROM session WHERE sid = :sid"; $query = $this->database->prepare ( $sql ); $query->bindValue ( ":sid", $session_id ); if ($query->execute ()) { $result = $query->fetch ( \PDO::FETCH_ASSOC ); if ($result) { return ( string ) $result ["data"]; } else { return ""; } } else { return ""; } } /** * * {@inheritDoc} * * @see \SessionHandlerInterface::write() * @param string $session_id * @param object $session_data */ public function write($session_id, $session_data) { $sql = "INSERT OR REPLACE INTO session (sid, data, created, updated) VALUES (:sid, :data, COALESCE((SELECT created FROM session WHERE sid = :sid), datetime('now')), datetime('now'))"; $query = $this->database->prepare ( $sql ); $query->bindValue ( ":sid", $session_id ); $query->bindValue ( ":data", $session_data ); return $query->execute (); } } ?>