ti-enxame.com

Recuperar sessão do joomla de dentro de um módulo

Estou definindo uma variável de sessão do arquivo externo 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');
}

Então, com isso, estou configurando minha sessão var a partir de arquivo externo, agora o problema que tenho é recuperá-la, digamos que você precise recuperar esse valor da sessão de um arquivo auxiliar:

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;
}

Portanto, o IF a = b está funcionando bem, o problema está em recuperar os valores da sessão que defini no arquivo externo ...

Alguma idéia de como recuperar esse valor? .. talvez eu esteja configurando errado, o arquivo que define a sessão está no arquivo raiz ... domain.com/sess.php, mas o arquivo auxiliar está em components/com_carreton/helper /file.php

Alguma ideia?

Obrigado.

3
Tanker

Você está usando a sessão errada. Se você seguir a lógica da cadeia de classes para $mainframe->initialize, Você encontrará, dependendo da sua versão do joomla, uma linha como https://github.com/joomla/joomla-cms/blob/ estadiamento/bibliotecas/joomla/application/web.php # L1062

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

Essa chamada de criação da sessão contém as variáveis ​​na tag options que definem o nome do cookie usado para a sessão.

Ao chamar JFactory::getSession() antes da inicialização, você criou uma sessão que provavelmente tem um nome de cookie ou número de identificação diferente. Em vez disso, use

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

Tente isso!

$session   =& JFactory::getSession();

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

Se você ativar a depuração na guia sistema na sua configuração global, poderá ver o que possui na sessão nos painéis de depuração na parte inferior da tela.

Eu evitaria usar um arquivo externo. Por que não usar uma função em um controlador para fazer a chamada ajax?

0
patterncatcher