it-swarm.it

Recupera sessione joomla da un modulo

Sto impostando una variabile di sessione da un file esterno usando ajax:

define( '_JEXEC', 1); 
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', realpath(dirname(__FILE__) .'/' ) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$session    = JFactory::getSession();
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();

// $session->clear( 'ss');
if (isset($_POST['v'])) {
$value = filter_input(INPUT_POST, 'v', FILTER_SANITIZE_NUMBER_INT);
$session->set('ss', $value);
$response = $session->get('ss');
// echo $response;
} else {
    echo $session->get('ss');
}

Quindi, con quello sto impostando la mia sessione var da file esterno, ora il problema che ho è recuperarlo, diciamo che è necessario recuperare quel valore di sessione da un file di supporto:

public function calculation($carreton) {
// lots of line to make some calculations
$session =& JFactory::getSession();
if ($session->get('ss') == 1) {
    $seg = 1000;
    $subtotal_e = $subtotal + $seg;
} else {
 $subtotal_e = 0;
}
// Final results
return $someArrs;
}

Quindi IF a = b funziona bene il problema sta recuperando i valori dalla sessione che ho impostato da un file esterno ...

Qualche idea su come recuperare quel valore? .. forse sto sbagliando, il file che imposta la sessione è nel file root ... domain.com/sess.php ma il file helper è in componenti/com_carreton/helper /file.php

Qualche idea?

Grazie.

3
Tanker

Stai usando la sessione sbagliata. Se segui la logica nella catena di classi per $mainframe->initialize Troverai, a seconda della tua versione di joomla, una linea come https://github.com/joomla/joomla-cms/blob/ messa in scena/librerie/joomla/application/web.php # L1062

$session = JSession::getInstance($handler, $options);

La chiamata di creazione della sessione contiene le variabili nel tag opzioni che definiscono il nome del cookie utilizzato per la sessione.

Chiamando JFactory::getSession() prima di inizializzare è stata creata una sessione che molto probabilmente ha un nome cookie o un numero ID diverso. Invece usa

$mainframe = JFactory::getApplication('site');
$mainframe->initialise();
$session    = $mainframe->getSession();
3
garyamort

Prova questo!

$session   =& JFactory::getSession();

$mainframe = JFactory::getApplication('site');
0
Doungdara

Se attivi il debug dalla scheda di sistema nella configurazione globale, sarai in grado di vedere cosa hai nella sessione nei pannelli di debug nella parte inferiore dello schermo.

Eviterei di usare un file esterno, perché non utilizzare una funzione in un controller per fare invece la chiamata ajax?

0
patterncatcher