Session verwenden von Joomla

  • Hallo Leute,


    folgendes Problem habe ich derzeit:


    Ich entwickle eine externe Website, welche nicht per Iframe in Joomla eingebuden ist. Um diese Seite nutzen zu können, benötige ich die Joomla-ID eines Benutzers. An sich ist das nicht kompliziert, das Auslesen benötigt jedoch ca 1,5s mehr als das normale Laden der Website, das möchte ich optimieren.
    Im Prinzip ist das auch nicht so das Problem, aber das Sessionhandling in Joomla ist schon ein bisschen komisch :-D..ich dachte, ich kann die ID einfach in der Session speichern - falsch gedacht.


    In der index.php befindet sich Folgendes:


    Code
    1. session_start(); include('php/funktionen.php');if(!isset($_SESSION['ID'])){ $_SESSION['ID'] = getUserID(); }


    Die Funktion sieht hierfür so aus:


    Jedes mal zerhaut es mir die Session, aber wieso? Hat jemand eine Erklärung? Oder hat jemand eine andere Idee, wie ich das lösen kann? Es gäbe ja auch die Möglichkeit, die ID per Cookie zu speichern, jedoch ist das sicherheitstechnisch schon etwas schlechter als in einer Session zu speichern. Um zu verhindern, dass Leute von einer anderen Joomla-Instanz auf meine externe Seite kommen, möchte ich zusätzlich die Session-ID per Coockie bzw. in einer Session speichern, um diese dann mit der aktuellen abzugleichen.
    Aber ich habe permanent keinen Zugriff auf die Session. Wenn ich nach dem Funktionsaufruf ein var_dump auf die Session mache, gibt er mir auch schön alles aus, bei einem Reload ist jedoch wieder alles weg.


    Ich hoffe, ich konnte das Problem weitestgehend beschreiben und ihr habt Lösungsansätze für mich :)


    Gruß,
    Wuz


    Post in anderem Forum: http://www.joomlaportal.de/joo…verwenden-von-joomla.html

  • Joomla hat eigenes Sessionhandling. Spar dir deshalb Sachen wie session_start. Führt nur zu warnings und notices.


    Etwas in Session schreiben:

    Code
    1. $node = 'meinzeugs';$session = JFactory::getSession();$sessionData = $session->get($node);// Ggf. leeres Sessiondata-Array definierenif(is_null($sessionData)){ $sessionData = array();}$wertZumEintragen = 'Dies oder das';$key = 'irgendwas';$sessionData[$key] = $wertZumEintragen;// In Session speichern$session->set($node, $sessionData);


    Auslesen

    Code
    1. $node = 'meinzeugs';$session = JFactory::getSession();$sessionData = $session->get($node);$key = 'irgendwas';echo $sessionData[$key];


    EDIT: Findest du dann (bei Standard-Sessioneinstellungen Joomlas) in der DB-Tabelle #__session, falls angucken willst.


    EDIT2: $node und array() braucht man nicht unbedingt, erspart aber ggf. Konflikte, wenn man seinen eigenen "Bereich" in der Session verwendet. Bin's halt so gewohnt.
    Vereinfacht:

    Code
    1. $session->set($key, $wertZumEintragen);
    2. echo $session->get($key);
  • Ok, ja das kenne ich schon.


    Problem ist aber, wenn ich mir die Joomlasession mit JFactory::getSession(); hole und per var_dump auslese, sehe ich, dass keine Joomlasession vorhanden:

    Code
    1. object(JSession)#12 (8) { ["_state":protected]=> string(8) "inactive"


    Wichtig ist denke ich mal zu berücksichtigen, dass die externe Seite NICHT in Joomla eingebunden ist. Also Joomla liegt z.B. unter root/joomla und die Datei unter root/datei.php.


    Wenn ich

    Code
    1. $app = JFactory::getApplication('site');
    2. $app->initialise();


    ausführe, dann bekomme ich schon eine Session, genau diesen Code möchte ich aber nur EINMAL zum Holen der UserID verwenden, da das die Seite recht unperformant macht.


    Gruß,
    Wuz