Joomla 4 -> Abfragen der SessionID schlägt fehl

  • Ich versuche gerade krampfhaft für ein Skript auf der Seite unserer Schule die User-ID vom gerade im Browser angemeldeten User zu bekommen.

    Nach einiger Recherche kam der Tipp: das geht unter Joomla 4 nicht mehr direkt.


    Evtl. hilfreich war dann der Tipp auf folgenden Weg, der mir die Session auslesen soll, den über die Session ID sollte ich dann auch per Datenbankzugriff an die User-ID des eingeloggten Users kommen. Oder nicht? Das Skript steht auch an anderer Stelle hier im Forum:


    Das Skript gibt mir auch eine Session ID aus. Aber es ist nicht die Session ID des angemeldeten Users, sondern jeweils die aktuellese Session-ID in der Datenbank. Wenn sich also inzwischen jemand anders angemeldet hat, bevor das Skript aufgerufen wurde, geht es schief.

    (Sicherlich könnte man das Problem umgehen, indem man das Skript direkt nach dem Anmelden des Users ausführt und so höchstwahrscheinlich die Session-ID des Users bekommt. Aber etwas unsicher ist das schon. Oder?)

    Findet jemand den Fehler oder ist das Ganze ein Denkfehler von mir und es ist normal, dass jeweils die aktuellste Session-ID aufgerufen wird?


    Danke im Voraus!


    kleiner gruener Frosch

  • Versuche es mal hiermit:


    PHP
    $user = Factory::getUser();
    $id = $user->id;
    $name = $user->name;

    Wenn die UserID gleich 0 ist, dann ist es ein unangemeldeter User (Gast).

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Hallo.


    Vielen Dank für die Rückmeldung.

    Eure beiden Vorschläge zielen doch darauf ab, die user-id direkt auszulesen. Hatte ich das dann falsch verstanden, dass das unter 4.x nicht mehr möglich wäre?


    Ich habe den Code aus Beitrag 3 dann einmal eingefügt.

    Jetzt kommt folgende Meldung: "Attempted to load class "Factory" from the global namespace. Did you forget a "use" statement?"


    Entschuldigt, wenn ich doofe Fragen stelle. Ich bin halt nur ein Schulleiter mit etwas Programmiererfahrung, der versucht, die Homepage der Schule aufzubohren. ;) Während Corona unter 3.x hat das gut funktioniert. Würde mich freuen, wenn das auch unter 4.x weiter gehen würde. ;)


    Danke also fürs Helfen!

    "

  • Es gibt keine doofen Fragen!


    Du musst ganz oben nach der defined-Zeile noch einfügen:


    Code
    use Joomla\CMS\Factory;


    Dann kannst du mit folgender Zeile die Benutzer-ID auslesen (0 = nicht eingeloggt):


    Code
    $userID = Factory::getApplication()->getIdentity()->id;

    Viel Erfolg!

  • Kubik-Rubik: Danke!


    Okay, der "use"-Fehler ist weg.


    Aber die Ausgabe ist weiterhin "0".

    Ich bin aber definitiv eingeloggt. Ich habe den SuperUser-Account genutzt und sehe überall die "Edit"-Buttons. ;)


    Habe ich noch irgendwas übersehen? *kopfkratz*


  • Aber die Ausgabe ist weiterhin "0".

    Bei mir wird im Frontend die richtige ID 2x angezeigt, wenn ich im Backend auf "Gemeinsame Sitzungen" stelle und mich im Backend neu anmelde. Habe leider nur selten Frontend-Logins. Deswegen der Umweg.


    EDIT: Jetzt doch noch eine Seite mit Frontend-Login zum Opfern gefunden und klappt auch.


    In beiden Fällen liegt dein Code in einer Datei test.php im ROOT der Joomla und ich rufe sie direkt im Browser auf, nachdem ich mich in einem anderen Tabulator angemeldet habe.

  • Danke.

    Dann ist irgendwo der Wurm bei mir drin.

    Ich habe mir gerade sogar mal eine komplett frische Installation gemacht. Es sind zwei Benutzer vorhanden. (Ich und ein Testuser.)


    - Login im Frontend

    -"Gemeinsame Sitzungen" ist auch aktiviert.

    - Rufe die datei id_einlesen.php in einem anderen Tab des Browsers auf, so wie du.


    Es wird als ID die 0 angezeigt. Weiterhin. *kopfkratz.*