it-swarm-es.tech

Recuperar sesión de joomla desde un módulo

Estoy configurando una variable de sesión desde un archivo 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');
}

Entonces, con eso estoy configurando mi var de sesión desde un archivo externo, ahora el problema que tengo es recuperarlo, digamos que necesita recuperar ese valor de sesión desde un archivo 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;
}

Entonces, si IF = b funciona bien, el problema es recuperar los valores de la sesión que he establecido desde un archivo externo ...

¿Alguna idea de cómo recuperar ese valor? .. tal vez lo estoy configurando mal, el archivo que establece la sesión está en el archivo raíz ... dominio.com/sess.php pero el archivo auxiliar está en components/com_carreton/helper /file.php

¿Algunas ideas?

Gracias.

3
Tanker

Estás usando la sesión incorrecta. Si sigue la lógica en la cadena de clases para $mainframe->initialize Encontrará, dependiendo de su versión de joomla, una línea como https://github.com/joomla/joomla-cms/blob/ puesta en escena/bibliotecas/joomla/application/web.php # L1062

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

Esa llamada de creación de sesión contiene las variables en la etiqueta de opciones que definen el nombre de la cookie utilizada para la sesión.

Al llamar a JFactory::getSession() antes de inicializar, ha creado una sesión que probablemente tenga un nombre de cookie diferente o un número de identificación. En lugar de usar

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

¡Prueba esto!

$session   =& JFactory::getSession();

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

Si activa la depuración desde la pestaña del sistema en su configuración global, podrá ver lo que tiene en la sesión en los paneles de depuración en la parte inferior de la pantalla.

Evitaría usar un archivo externo, ¿por qué no usar una función en un controlador para hacer la llamada ajax?

0
patterncatcher