Session Klasse erweitern?


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

EuroCent

Erfahrenes Mitglied
Guten Morgen zusammen,

ich habe da folgende Frage/Problem.
Und zwar möchte Ich der Session Klasse eine weitere Funktion hinzufügen...

Die Session wird dann über Session::getInstance() aufgerufen.

Wie kann Ich aber weitere Konstante angeben?
In der Klasse habe Ich eine private Variable "$sessionState" und diese wird standardmäßig auf SESSION_NOT_STARTED gesetzt.

Nun möchten wir aber die Variable $sessionState manipulieren.
Allerdings wenn Ich einen REDIRECT auf eine Seite mache, wird ja automatisch wieder SESSION_NOT_STARTED angelegt.
Wie aber Manipuliere Ich genau diesen Statement damit ich den unter der Funktion "startSession" entsprechend Prüfen kann?

Session:

PHP:
<?php
require_once 'User.php';

class Session {
    
    const SESSION_STARTED = true;
    const SESSION_NOT_STARTED = false;
    
    private $sessionState = self::SESSION_NOT_STARTED;
    
    private static $instance;

    private function __constructor() {}

    function __destruct() {}

    public static function getInstance() {
        
        if(!isset(self::$instance)) {
            self::$instance = new self;
        }
        
        self::$instance->startSession();
        
        return self::$instance;
    }
    
    public function startSession($u = '') {
        
        if($this->sessionState == self::SESSION_NOT_STARTED) {
            $this->sessionState = session_start();
        }
        
        $_SESSION['REMOTE_USER'] = $_SERVER['REMOTE_USER'];
        
        $this->getSessionData_RemoteUser($u);
        
        return $this->sessionState;
    }

    public function getSessionData_RemoteUser($userLogin = '') {
        global $con;

        if ($userLogin == "" || $con['devExtent'] == '') {
            $userLogin = $_SESSION['REMOTE_USER'];
        }

        if (isset($_SESSION['loggedAS'])) {
            $userLogin = $_SESSION['loggedAS'];
            //UserObjekt wird angelegt
            $objUser = new User();
            $objUser->setConnection($con); //Verbindung herstellen
            //methode holt die Metadaten des Users -> Standort/Team...
            $userData = $objUser->getUserData($userLogin);
            $_SESSION['userData'] = $userData;

            $UserTLData = $objUser->getUserTL($userLogin);
            $_SESSION['UserTLData'] = $UserTLData;

            ///WEITER
            //holt sich die Rechte des User aus der Benutzerverwaltung
            $userRights = $objUser->getUserRights($userLogin);
            $_SESSION['userRights'] = $userRights;

            //holt sich die GruppenID des User aus der Benutzerverwaltung
            $userGroupID = $objUser->getUserGroups($userLogin);
            $_SESSION['userGroupID'] = $userGroupID;

            //holt sich die GruppenName des User aus der Benutzerverwaltung
            $userGroupName = $objUser->getUserGroupsName($userLogin);
            $_SESSION['userGroupName'] = $userGroupName;

            $objUser->setUserLastLogin($userLogin);
        } else {
            //UserObjekt wird angelegt
            $objUser = new User();
            $objUser->setConnection($con); //Verbindung herstellen
            //methode holt die Metadaten des Users -> Standort/Team...
            
            $userLogin = str_replace("VF-ROOT\\","",$userLogin);
            $userData = $objUser->getUserData($userLogin);
            $_SESSION['userData'] = $userData;

            $UserTLData = $objUser->getUserTL($userLogin);
            $_SESSION['UserTLData'] = $UserTLData;

            ///WEITER
            //holt sich die Rechte des User aus der Benutzerverwaltung
            $userRights = $objUser->getUserRights($userLogin);
            $_SESSION['userRights'] = $userRights;

            //holt sich die GruppenID des User aus der Benutzerverwaltung
            $userGroupID = $objUser->getUserGroups($userLogin);
            $_SESSION['userGroupID'] = $userGroupID;

            //holt sich die GruppenName des User aus der Benutzerverwaltung
            $userGroupName = $objUser->getUserGroupsName($userLogin);
            $_SESSION['userGroupName'] = $userGroupName;

            $objUser->setUserLastLogin($userLogin);
        }
    }

    public function checkUserRights($title, $right) {
        //UserObjekt wird angelegt
        $objUser = new User();
        //methode holt die Metadaten des Users -> Standort/Team...
        if ($objUser->getUserData($title, $right)) {
            return true;
        } else {
            return false;
        }
    }
}
 

merzi86

Erfahrenes Mitglied
Du könntest der getInstace Methode ein Parameter übergeben, welches für genau diesen Zweck da ist.

PHP:
public static function getInstance($state = self::SESSION_NOT_STARTED ) {
       
        if(!isset(self::$instance)) {
            self::$instance = new self;
            self::$instance->sessionState = $state;
        }

        self::$instance->startSession();
       
        return self::$instance;
    }
So könnte eine Instanz der Session Klasse mit und ohne Angabe geholt werden.

PHP:
$SESSION = Session::getInstance();
oder gleicher vergleichsweise:
PHP:
$SESSION = Session::getInstance(Session::SESSION_NOT_STARTED);
bzw. falls ihm gesagt werden soll, dass die Session schon gestartet ist:
PHP:
$SESSION = Session::getInstance(Session::SESSION_STARTED);
Allerdings vorsichtig sein ich habe jetzt nicht alles überprüft, ob es vielleicht zu Problemen kommen kann.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…