web-dev-qa-db-fra.com

Récupérer une session joomla depuis un module

Je crée une variable de session à partir d'un fichier externe en utilisant 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');
}

Donc, avec cela, je mets ma session var à partir d'un fichier externe, le problème que j'ai maintenant est de la récupérer, disons que vous devez récupérer cette valeur de session depuis un fichier d'assistance:

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

Si le problème a = b fonctionne correctement, le problème consiste à récupérer les valeurs de la session que j'ai définie à partir d'un fichier externe ...

Toute idée de comment récupérer cette valeur? .. peut-être que je me trompe, le fichier qui définit la session se trouve dans le fichier racine ... domain.com/sess.php mais le fichier d'assistance se trouve dans components/com_carreton/helper /file.php

Des idées?

Merci.

3
Tanker

Vous utilisez la mauvaise session. Si vous suivez la logique en bas de la chaîne de classes pour $mainframe->initialize, Vous trouverez, selon votre version de joomla, une ligne comme https://github.com/joomla/joomla-cms/blob/ staging/libraries/joomla/application/web.php # L1062

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

Cet appel de création de session contient les variables dans la balise options qui définissent le nom du cookie utilisé pour la session.

En appelant JFactory::getSession() avant l'initialisation, vous avez créé une session qui porte probablement un nom de cookie ou un numéro d'identification différent. Utilisez plutôt

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

Essaye ça!

$session   =& JFactory::getSession();

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

Si vous activez le débogage à partir de l'onglet Système de votre configuration globale, vous pourrez voir ce que vous avez dans la session dans les panneaux de débogage au bas de l'écran.

J'éviterais d'utiliser un fichier externe, pourquoi ne pas utiliser une fonction dans un contrôleur pour effectuer l'appel ajax à la place?

0
patterncatcher