From bf26b35c884ce8df6500bcd7ad6dc78bf79d3b3c Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Tue, 5 Jul 2016 08:58:46 +0200
Subject: [PATCH] chore: Neuer Cron -> Session cleanup

---
 cron.xml                      | 15 +++++++++++----
 src/QUI/Cron/QuiqqerCrons.php | 28 ++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/cron.xml b/cron.xml
index 9403121..c315c5c 100644
--- a/cron.xml
+++ b/cron.xml
@@ -5,6 +5,11 @@
         <description>Ordner für temporäre Daten leeren</description>
     </cron>
 
+    <cron exec="\QUI\Cron\QuiqqerCrons::clearSessions">
+        <title>Sessions säubern</title>
+        <description>Löscht unnötige / abgelaufene Session Dateien</description>
+    </cron>
+
     <cron exec="\QUI\Cron\QuiqqerCrons::clearCache">
         <title>Cache leeren</title>
         <description>Kompletten Cache leeren</description>
@@ -13,8 +18,10 @@
     <cron exec="\QUI\Cron\QuiqqerCrons::clearAdminMediaCache">
         <title>Media Cache der Administration leeren</title>
         <description>
-            Leert die Cachebilder von der Administration.<br />
-            Dies sind zum Beispiel die Vorschaubilder in der Administration.<br />
+            Leert die Cachebilder von der Administration.
+            <br/>
+            Dies sind zum Beispiel die Vorschaubilder in der Administration.
+            <br/>
             Der öffentliche Mediacache wird nicht geleert
         </description>
     </cron>
@@ -32,8 +39,8 @@
             Durchsucht das Projekt und aktiviert oder deaktiviert Seiten je nach Veröffentlichungsdatum.
         </description>
         <params>
-            <param name="project" type="string" />
-            <param name="lang" type="string" />
+            <param name="project" type="string"/>
+            <param name="lang" type="string"/>
         </params>
     </cron>
 
diff --git a/src/QUI/Cron/QuiqqerCrons.php b/src/QUI/Cron/QuiqqerCrons.php
index 83737ea..38001e4 100644
--- a/src/QUI/Cron/QuiqqerCrons.php
+++ b/src/QUI/Cron/QuiqqerCrons.php
@@ -48,6 +48,34 @@ class QuiqqerCrons
         QUI\Utils\System\File::unlink(VAR_DIR . 'cache/admin/media/');
     }
 
+    /**
+     * delete all unwanted / unneeded sessions
+     */
+    public static function clearSessions()
+    {
+        // clear nativ session storage
+        $sessionDir = VAR_DIR . 'sessions/';
+
+        if (!is_dir($sessionDir)) {
+            return;
+        }
+
+        $sessionFiles = QUI\Utils\System\File::readDir($sessionDir);
+        $maxtime      = 1400;
+
+        if (QUI::conf('session', 'max_life_time')) {
+            $maxtime = (int)QUI::conf('session', 'max_life_time');
+        }
+
+        foreach ($sessionFiles as $sessionFile) {
+            $fmtime = filemtime($sessionDir . $sessionFile);
+
+            if ($fmtime + $maxtime < time()) {
+                unlink($sessionDir . $sessionFile);
+            }
+        }
+    }
+
     /**
      * Check project sites release dates
      * Activate or deactivate sites
-- 
GitLab