it-swarm-eu.dev

Come gestire le sessioni tra Joomla e le applicazioni esterne PHP?

Sto cercando di ottenere comportamenti single sign on tra applicazioni PHP/Perl e Joomla. Il punto di ingresso principale sarebbe Joomla, che avrebbe impostato le sessioni e le altre variabili dei cookie che sarebbero state utilizzate dal Perl esterno e PHP. For PHP Applicazioni, ho usato il seguente codice dopo aver letto e ricercato, per verificare se la sessione di Joomla è attiva.

 $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();

Il codice sopra funziona bene come in, controlla la sessione se è attivo, quindi consente all'utente di lavorare su external PHP app. Il problema è che se non sto usando Joomla principale sito e sto lavorando solo sull'esterno PHP, la sessione sul sito Web principale di joomla scade portando quindi al logout sull'applicazione php esterna.

La mia domanda è: come posso gestire le sessioni tra il sito Joomla esterno e quello principale?

Mi dispiace per il lungo post. Gradirei davvero qualsiasi aiuto in merito.

Mille grazie, Teju

2
Teju Desai

Mantieni viva la sessione eseguendo il ping di Joomla tramite JS:

<script>
setInterval(function(){

    var xhttp = new XMLHttpRequest();
    xhttp.open('get', 'https://yourdomain.tld/index.php', true);
    xhttp.send();

    },30000);
</script>
0
Dennis Heiden