openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

Session.class.php (2084B)


      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  * @author $Author$
     19  * @version $Revision$
     20  * @package openrat.service
     21  */
     22 class Session
     23 {
     24 	const KEY_OIDC_PROVIDER = 'oidc_provider';
     25 	const KEY_DBID = 'dbid';
     26 	const KEY_DB = 'database';
     27 	const KEY_USER = 'userObject';
     28 	const KEY_CONFIG = 'config';
     29 	const KEY_PASSWORD_COMMIT_CODE = 'password_commit_code';
     30 	const KEY_PASSWORD_COMMIT_NAME = 'password_commit_name';
     31 	const KEY_REGISTER_CODE = 'register_code';
     32 	const KEY_REGISTER_MAIL = 'register_mail';
     33 	const KEY_MAIL_CHANGE_CODE = 'mail_change_code';
     34 	const KEY_MAIL_CHANGE_MAIL = 'mail_change_mail';
     35 	const KEY_TOKEN            = 'token';
     36 
     37 	const PRAEFIX = 'ors_';
     38 
     39 	private static $sessionStarted;
     40 
     41 	public static function get($var)
     42 	{
     43 		$SESS = &$_SESSION;
     44 
     45 		if (isset($SESS[self::PRAEFIX . $var]))
     46 			return $SESS[self::PRAEFIX . $var];
     47 		else
     48 			return '';
     49 	}
     50 
     51 	public static function set($var, $value)
     52 	{
     53 		$SESS = &$_SESSION;
     54 		$SESS[self::PRAEFIX . $var] = $value;
     55 	}
     56 
     57 
     58 	/**
     59 	 * Schliesst die aktuelle Session
     60 	 *
     61 	 * Diese Funktion sollte so schnell wie moeglich aufgerufen werden, da vorher
     62 	 * keine andere Seite (im Frameset oder parallele AJAX-Requests) geladen werden kann
     63 	 * Nach Aufruf dieser Methode sind keine Session-Zugriffe ueber diese Klasse mehr
     64 	 * moeglich.
     65 	 */
     66 	public static function close()
     67 	{
     68 		session_write_close();
     69 		self::$sessionStarted = false;
     70 	}
     71 
     72 
     73 	public static function token() {
     74 		return self::get( self::KEY_TOKEN );
     75 	}
     76 
     77 
     78     public static function start()
     79     {
     80 		// Start the session.
     81 		session_name(getenv('CMS_SESSION_NAME') ?: 'or_sid');
     82 		session_start();
     83 
     84 		if   ( ! self::token() )
     85 			self::set( self::KEY_TOKEN,Password::randomHexString(15 ) );
     86 
     87 		self::$sessionStarted = true;
     88 	}
     89 }
     90