PDA

View Full Version : [PHP] Sessione PHP all'interno di Joomla


Alhazred
19-03-2009, 18:26
Ho messo un link a questo script

first.php

<?php
session_start();
$_SESSION['test'] = "testo di prova";
?>
<a href="prestazioni/second.php">link</a>

Appare la pagina con il link che punta a second.php

second.php è fatta in questo modo

<?php
session_start();
$var = $_SESSION['test'];
print $var;
?>

cliccando sul link arrivo a second.php che mi stampa correttamente a video il contenuto di $_SESSION['test'] ovvero
testo di prova

Ora la pagina da cui parto si è un po' complicata, ovviamente, diventando così:

prestazioni.php

<?php
session_start();
$_SESSION['test'] = "testo di prova";

/**** questo serve per prendere una variabile messa in sessione da Joomla ****/
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$user =& JFactory::getUser();
/******************************************************/

header("location: /prestazioni/second.php"); //redirect su second.php
?>

second.php è invariata, stavolta però non stampa il contenuto della variabile.

Credo ci sia qualcosa nel codice di prestazioni.php che da fastidio alla variabile in sessione... ma cosa???

La sessione viene creata, la variabile $_SESSION['test'] viene valorizzata (infatti all'interno di prestazioni.php posso stamparla tranquillamente), ma second.php non la vede...

Sto diventando pazzo.

Alhazred
19-03-2009, 18:42
Ho provato con po' di combinazioni a commentare queste righe:

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$user =& JFactory::getUser();

Il risultato è che la variabile arriva a second.php se i 2 require_once sono disattivati.
Cosa fanno di male a quella povera variabile in sessione? Come posso aggirare il problema?

Alhazred
19-03-2009, 19:55
Riporto il codice dei 2 file chiamati nei require_once, magari riuscite a capire meglio il problema

defines.php

<?php

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

/**
* Joomla! Application define
*/

//Global definitions
//Joomla framework path definitions
$parts = explode( DS, JPATH_BASE );

//Defines
define( 'JPATH_ROOT', implode( DS, $parts ) );

define( 'JPATH_SITE', JPATH_ROOT );
define( 'JPATH_CONFIGURATION', JPATH_ROOT );
define( 'JPATH_ADMINISTRATOR', JPATH_ROOT.DS.'administrator' );
define( 'JPATH_XMLRPC', JPATH_ROOT.DS.'xmlrpc' );
define( 'JPATH_LIBRARIES', JPATH_ROOT.DS.'libraries' );
define( 'JPATH_PLUGINS', JPATH_ROOT.DS.'plugins' );
define( 'JPATH_INSTALLATION', JPATH_ROOT.DS.'installation' );
define( 'JPATH_THEMES' , JPATH_BASE.DS.'templates' );
define( 'JPATH_CACHE', JPATH_BASE.DS.'cache');


framework.php

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

@set_magic_quotes_runtime( 0 );
@ini_set('zend.ze1_compatibility_mode', '0');

/*
* Installation check, and check on removal of the install directory.
*/
if (!file_exists( JPATH_CONFIGURATION . DS . 'configuration.php' ) || (filesize( JPATH_CONFIGURATION . DS . 'configuration.php' ) < 10) || file_exists( JPATH_INSTALLATION . DS . 'index.php' )) {
if( file_exists( JPATH_INSTALLATION . DS . 'index.php' ) ) {
header( 'Location: installation/index.php' );
exit();
} else {
echo 'No configuration file found and no installation code available. Exiting...';
exit();
}
}

/*
* Joomla! system startup
*/

// System includes
require_once( JPATH_LIBRARIES .DS.'joomla'.DS.'import.php');

// Pre-Load configuration
require_once( JPATH_CONFIGURATION .DS.'configuration.php' );

// System configuration
$CONFIG = new JConfig();

if (@$CONFIG->error_reporting === 0) {
error_reporting( 0 );
} else if (@$CONFIG->error_reporting > 0) {
error_reporting( $CONFIG->error_reporting );
ini_set( 'display_errors', 1 );
}

define( 'JDEBUG', $CONFIG->debug );

unset( $CONFIG );

/*
* Joomla! framework loading
*/

// Include object abstract class
require_once(JPATH_SITE.DS.'libraries'.DS.'joomla'.DS.'utilities'.DS.'compat'.DS.'compat.php');

// System profiler
if (JDEBUG) {
jimport( 'joomla.error.profiler' );
$_PROFILER =& JProfiler::getInstance( 'Application' );
}

// Joomla! library imports;
jimport( 'joomla.application.menu' );
jimport( 'joomla.user.user');
jimport( 'joomla.environment.uri' );
jimport( 'joomla.html.html' );
jimport( 'joomla.utilities.utility' );
jimport( 'joomla.event.event');
jimport( 'joomla.event.dispatcher');
jimport( 'joomla.language.language');
jimport( 'joomla.utilities.string' );
?>