File modules/util/Session.class.php

Last commit: Sat Oct 17 01:14:30 2026 +0200	Jan Dankert	New: Using a structured class for the API-Response. The output for GET-Requests is now without the "output" layer.
1 <?php 2 3 // PHP-Versionsunabhaengiges Array fuer die Session-Variablen ermitteln 4 namespace util; 5 6 use cms\model\User; 7 use security\Password; 8 9 10 /** 11 * Session-Funktionen zum Lesen/Schreiben in/von HTTP-Session 12 * In der Session werden folgende Daten abgelegt 13 * - Angemeldeter Benutzer 14 * - Datenbankobjekt 15 * - Konfiguration 16 * Die Methoden dieser Klassen koennen statisch aufgerufen werden. 17 */ 18 class Session 19 { 20 const KEY_OIDC_PROVIDER = 'oidc_provider'; 21 const KEY_DBID = 'dbid'; 22 const KEY_DB = 'database'; 23 const KEY_USER = 'userObject'; 24 const KEY_CONFIG = 'config'; 25 const KEY_PASSWORD_COMMIT_CODE = 'password_commit_code'; 26 const KEY_PASSWORD_COMMIT_NAME = 'password_commit_name'; 27 const KEY_REGISTER_CODE = 'register_code'; 28 const KEY_REGISTER_MAIL = 'register_mail'; 29 const KEY_MAIL_CHANGE_CODE = 'mail_change_code'; 30 const KEY_MAIL_CHANGE_MAIL = 'mail_change_mail'; 31 const KEY_TOKEN = 'token'; 32 const KEY_GENERATED_TOKEN = 'newtoken'; 33 34 const PRAEFIX = 'ors_'; 35 36 private static $sessionStarted; 37 38 public static function get($var) 39 { 40 $SESS = &$_SESSION; 41 42 if (isset($SESS[self::PRAEFIX . $var])) 43 return $SESS[self::PRAEFIX . $var]; 44 else 45 return null; 46 } 47 48 public static function set($var, $value): void 49 { 50 // Should so, but no not possible :( 51 //if ( !self::$sessionStarted ) 52 // throw new \LogicException('the session is closed for writing'); 53 54 $SESS = &$_SESSION; 55 $SESS[self::PRAEFIX . $var] = $value; 56 } 57 58 59 /** 60 * Schliesst die aktuelle Session 61 * 62 * Diese Funktion sollte so schnell wie moeglich aufgerufen werden, da vorher 63 * keine andere Seite (im Frameset oder parallele AJAX-Requests) geladen werden kann 64 * Nach Aufruf dieser Methode sind keine Session-Zugriffe ueber diese Klasse mehr 65 * moeglich. 66 */ 67 public static function close() 68 { 69 session_write_close(); 70 self::$sessionStarted = false; 71 } 72 73 74 public static function token() { 75 return self::get( self::KEY_TOKEN ); 76 } 77 78 79 public static function start() 80 { 81 // Start the session. 82 session_name(getenv('CMS_SESSION_NAME') ?: 'or_sid'); 83 session_start(); 84 85 self::$sessionStarted = true; 86 87 if ( ! self::token() ) 88 self::set( self::KEY_TOKEN,Password::randomHexString(15 ) ); 89 90 } 91 } 92
Download modules/util/Session.class.php
History Sat, 17 Oct 2026 01:14:30 +0200 Jan Dankert New: Using a structured class for the API-Response. The output for GET-Requests is now without the "output" layer. Tue, 13 Oct 2026 00:41:49 +0200 Jan Dankert PHP8: Fixup old code: if there is no session entry, der return value should be null. Mon, 6 Jan 2025 22:48:11 +0100 Jan Dankert New: Now it is possible to remove and create new login/api token for a user; new API authorization with the authorization scheme "api". Fri, 15 Apr 2022 14:51:22 +0200 dankert Refactoring: User,Config and Database info is now stored in the Request, because so there is no session required for clients which are using Basic Authorization. Fri, 3 Dec 2021 23:27:44 +0100 dankert New: Only allowed methods are shown in the dropdown menu; Some security enhancements. Thu, 12 Nov 2020 02:03:32 +0100 Jan Dankert Fixing registering a new user; Fixing forgotten password Thu, 12 Nov 2020 01:12:45 +0100 Jan Dankert Fix: Workflow for changing the users email adress; Mail sending; Forwarding forms Sat, 31 Oct 2020 13:54:19 +0100 Jan Dankert Cleanup: Use constants for session keys. Sat, 31 Oct 2020 03:48:03 +0100 Jan Dankert Some bad fixes for OIDC to work properly. Sat, 26 Sep 2020 03:03:47 +0200 Jan Dankert Refactoring: less global functions. Sat, 22 Feb 2020 23:58:02 +0100 Jan Dankert Refactoring: Namespacing for module 'util'. Mon, 20 May 2019 00:34:19 +0200 Jan Dankert Refactoring: Datenbankverbindung im Dispatcher erstellen. Bisher wurde in der Loginaction die DB-Verbindung aufgebaut, was dort falsch aufgehoben war. Sun, 23 Sep 2018 22:26:00 +0200 Jan Dankert Die IndexAction soll beim Start des UI auch die Action und Id ermitteln. Damit die Id gesetzt werden kann, muss die Id über den Dispatcher in die Action gebracht werden. Dazu muss erst der Request gesetzt werden, bevor die weitere Verarbeitung geschieht, daher geschieht die fachliche Initialisierung der Actions jetzt (wieder) über eine init()-Methode, die vom Dispatcher aufgerufen wird. Thu, 16 Aug 2018 00:36:25 +0200 Jan Dankert Aufgeräumt: Veraltete Session-Funktionen entfernt, da Projekt,Sprache,Model nicht mehr in der Session gehalten werden. Fri, 29 Dec 2017 01:35:50 +0100 Jan Dankert Großes Refactoring: Neues Modul CMS-UI. Dieses enthält sämtliche Logik für die Bedienoberfläche. TODO: Modul CMS-API. Sat, 16 Dec 2017 23:21:31 +0100 Jan Dankert Eigenes Modul für alle Util-Klassen.