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:
<?php
include('/eigene_skripte/gs_krankmeldung/db_joomla_connect.php');
define('_JEXEC', 1);
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';
// Boot the DI container
$container = \Joomla\CMS\Factory::getContainer();
/*
* Alias the session service keys to the web session service as that is the primary session backend for this application
*
* In addition to aliasing "common" service keys, we also create aliases for the PHP classes to ensure autowiring objects
* is supported. This includes aliases for aliased class names, and the keys for aliased class names should be considered
* deprecated to be removed when the class name alias is removed as well.
*/
$container->alias('session.web', 'session.web.site')
->alias('session', 'session.web.site')
->alias('JSession', 'session.web.site')
->alias(\Joomla\CMS\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\Session::class, 'session.web.site')
->alias(\Joomla\Session\SessionInterface::class, 'session.web.site');
// Instantiate the application.
$app = $container->get(\Joomla\CMS\Application\SiteApplication::class);
// Set the application as global app
\Joomla\CMS\Factory::$application = $app;
$userInfo = \Joomla\CMS\Factory::getApplication()->getSession()->get('user');
$userSession = \Joomla\CMS\Factory::getApplication()->getSession()->getId();
echo $userInfo->name."<br>"; //zeigt nichts an ;)
echo $userSession."<br>"; // zeigt die aktuellste Session-ID an, aber nicht die vom eingeloggten User
Alles anzeigen
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