Rev 9 | Rev 21 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass MySessionHandler implements SessionHandlerInterface {private static $instance = null;private static $sessionTab = 0;private static $_sess_db = null;private static $db_user = null;private static $db_pass = null;private static $db_name = null;private static $db_host = null;public static function getInstance($set_tab = null, $mysqlConfig = null){if (is_null(self::$instance)){self::$instance = new self();}if ($set_tab && !is_null($set_tab) && $set_tab > 0) {self::setSessionTab($set_tab);} else {self::setSessionTab();}// store mysqli configurationif (!is_null($mysqlConfig)) {if (isset($mysqlConfig['db_user']) && !empty($mysqlConfig['db_user'])) {self::$db_user = $mysqlConfig['db_user'];} else {throw new \Exception("MySessionHandler:: - db_user not set in configuration");}if (isset($mysqlConfig['db_pass']) && !empty($mysqlConfig['db_pass'])) {self::$db_pass = $mysqlConfig['db_pass'];} else {throw new \Exception("MySessionHandler:: - db_pass not set in configuration");}if (isset($mysqlConfig['db_name']) && !empty($mysqlConfig['db_name'])) {self::$db_name = $mysqlConfig['db_name'];} else {throw new \Exception("MySessionHandler:: - db_name not set in configuration");}if (isset($mysqlConfig['db_host']) && !empty($mysqlConfig['db_host'])) {self::$db_host = $mysqlConfig['db_host'];} else {throw new \Exception("MySessionHandler:: - db_host not set in configuration");}}return self::$instance;}public static function getDBSessionId(){return self::$_sess_db;}public static function getSessionTab(){return self::$sessionTab;}public static function setSessionTab($tab = 0){self::$sessionTab = $tab ? (int)$tab : (int)rand(1, pow(10, 9) - 1);}public function open($savePath, $sessionName){if(is_null(self::$sessionTab)){self::setSessionTab();}self::$_sess_db = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name);if (mysqli_connect_errno()){return false;}return true;}public function close(){return mysqli_close(self::$_sess_db);}public function read($id){$id = mysqli_real_escape_string(self::$_sess_db, $id);$sql = "SELECT dataFROM sessionsWHERE id = '$id' and tab = '" . $this->getSessionTab() . "'";if ($result = mysqli_query(self::$_sess_db, $sql)){if (mysqli_num_rows($result)){$record = mysqli_fetch_assoc($result);$decrypted = Cryptor::Decrypt($record['data']);return $decrypted;}}return '';}public function write($id, $data){$id = mysqli_real_escape_string(self::$_sess_db, $id);$access = mysqli_real_escape_string(self::$_sess_db, time());$encrypted = Cryptor::Encrypt($data);$sql = "REPLACEINTO sessionsVALUES ('$id', '" . $this->getSessionTab() . "', '$access', '$encrypted')";return mysqli_query(self::$_sess_db, $sql);}public function destroy($id){$id = mysqli_real_escape_string(self::$_sess_db, $id);$sql = "DELETEFROM sessionsWHERE id = '$id' and tab = '" . $this->getSessionTab() . "'";return mysqli_query(self::$_sess_db, $sql);}public function gc($maxlifetime){$old = mysqli_real_escape_string(self::$_sess_db, time() - $maxlifetime);$sql = "DELETEFROM sessionsWHERE access < '$old'";return mysqli_query(self::$_sess_db, $sql);}}