J'essaie d'obtenir des comportements de connexion unique entre les applications PHP/Perl et Joomla. Le point d’entrée principal serait Joomla, qui configurerait les sessions et d’autres variables de cookie qui seraient utilisées par les applications externes Perl et PHP. Pour PHP Applications, j’ai utilisé le code ci-dessous après avoir lu et fait des recherches pour vérifier si la session Joomla est active.
$rootFolder = explode(DS,dirname(__FILE__));
$currentfolderlevel = 1;
array_splice($rootFolder,-$currentfolderlevel);
$base_folder = implode(DS,$rootFolder);
$base_folder= $base_folder.'/'.'xxx';
array_Push($rootFolder, "/xxx");
if(is_dir($base_folder .DS.'libraries'.DS.'joomla'))
{
define( '_JEXEC', 1 );
define('JPATH_BASE',implode(DS,$rootFolder));
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
jimport( 'joomla.user.user');
jimport( 'joomla.session.session');
jimport( 'joomla.user.authentication');
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$user =JFactory::getUser();
$session = JFactory::getSession();
//$groups = $options['user']->groups;
$session = JFactory::getSession();
$sessionState=$session->getState();
$sessionExpiry=$session->getName();
Le code ci-dessus fonctionne bien en tant que, il vérifie la session si son actif permet à l'utilisateur de travailler sur external PHP app. Le problème est que si je n'utilise pas le principal Joomla et je ne travaille que sur l’application externe PHP, la session sur le site Web principal de Joomla expire, ce qui entraîne la déconnexion de l’application php externe.
Ma question est la suivante: comment gérer les sessions entre le site externe et le site principal Joomla?
Je suis désolé pour le long post. J'apprécierais vraiment toute aide sur ceci.
Merci beaucoup, Teju
Maintenez la session active en envoyant une requête ping à Joomla via JS:
<script>
setInterval(function(){
var xhttp = new XMLHttpRequest();
xhttp.open('get', 'https://yourdomain.tld/index.php', true);
xhttp.send();
},30000);
</script>