From 5a8fdeaebfd3df19fdffa992c3661c102f089aa7 Mon Sep 17 00:00:00 2001
From: JediKev <kevin@enhancesoft.com>
Date: Wed, 19 Jul 2017 16:48:01 -0500
Subject: [PATCH] cron: Delete Expired Sessions

This addresses an issue where expired sessions would not be removed from
the database. This caused the session table to fill up and create
unnecessary issues. This adds a cleanup method to remove all expired
sessions from the database.
---
 include/class.cron.php       | 6 ++++++
 include/class.ostsession.php | 8 ++++++++
 2 files changed, 14 insertions(+)

diff --git a/include/class.cron.php b/include/class.cron.php
index e545c5afb..232d6bf2b 100644
--- a/include/class.cron.php
+++ b/include/class.cron.php
@@ -51,6 +51,11 @@ class Cron {
         AttachmentFile::deleteOrphans();
     }
 
+    function CleanExpiredSessions() {
+        require_once(INCLUDE_DIR.'class.ostsession.php');
+        DbSessionBackend::cleanup();
+    }
+
     function MaybeOptimizeTables() {
         // Once a week on a 5-minute cron
         $chance = rand(1,2000);
@@ -100,6 +105,7 @@ class Cron {
         self::MailFetcher();
         self::TicketMonitor();
         self::PurgeLogs();
+        self::CleanExpiredSessions();
         // Run file purging about every 10 cron runs
         if (mt_rand(1, 9) == 4)
             self::CleanOrphanedFiles();
diff --git a/include/class.ostsession.php b/include/class.ostsession.php
index dbb5cf631..51f8bd2fc 100644
--- a/include/class.ostsession.php
+++ b/include/class.ostsession.php
@@ -158,6 +158,10 @@ abstract class SessionBackend {
         return $this->update($id, $i['touched'] ? session_encode() : $data);
     }
 
+    function cleanup() {
+        $this->gc(0);
+    }
+
     abstract function read($id);
     abstract function update($id, $data);
     abstract function destroy($id);
@@ -220,6 +224,10 @@ extends SessionBackend {
         return SessionData::objects()->filter(['session_id' => $id])->delete();
     }
 
+    function cleanup() {
+        self::gc(0);
+    }
+
     function gc($maxlife){
         SessionData::objects()->filter([
             'session_expire__lte' => SqlFunction::NOW()
-- 
GitLab