Как получить данные сеанса (из внешнего скрипта php), не перезаписывая сеанс Joomla? - PullRequest
3 голосов
/ 19 января 2012

Когда я включаю фреймворк Joomla, сессия Joomla, похоже, перезаписывает сессию, которую я использую в другом скрипте. Как я могу получить информацию из первого сеанса И от Joomla?

ДЕТАЛИ

Я начал сеанс в php-скрипте, внешнем по отношению к Joomla.

Этот файл - file1.php

<?php 
    session_start();
    $qid[0]=1;
    $qid[0]=2;
    $qid[0]=3;
    $_SESSION['qid']=$qid;
?>

У меня есть php-скрипт с именем main.php. Он включает в себя 2 файла: getsessdata.php и getjoomla.php

main..php

<?php 
    include("getsessdata.php"); 
    include("getjoomla.php"); 
?>

Я могу получить данные сеанса из main.php, если getjoomla.php не включен.

var_dump ($ _ SESSION);Показывает, что при включении getjoomla.php отсутствуют данные сеанса для qid.

getsessdata.php

<?php 
    session_start();
    $qid=$_SESSION['qid']; 
?>

getjoomla.php

<?php
   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' );
   require_once (JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'environment'.DS.'request.php');

   $mainframe =& JFactory::getApplication('site');
   $mainframe->initialise();
?>   

ВОПРОС:

Как получить доступ к информации о сеансе из file1.php и по-прежнему получать доступ к данным из getjoomla.php?Почему я теряю информацию из первого сеанса?

Не уверен, поможет ли это, но как только у меня есть данные сеанса из файла file1 в main.php, сеанс больше не нужен.

Ответы [ 3 ]

1 голос
/ 19 января 2012

Продолжая использовать $ mainframe, я думаю, Joomla! 1.5.x.

Когда вы вызываете JFactory :: getApplication ('site') в своей конструкции, новый сеанс создается с использованием session_start () с переданным в Id, это удаляет любой предыдущий сеанс.

Более конкретно, когда вызывается JSession, это __construct вызовы _start

function _start()
{
    //  start session if not startet
    if( $this->_state == 'restart' ) {
        session_id( $this->_createId() );
    }

    session_cache_limiter('none');
    session_start();

    // Send modified header for IE 6.0 Security Policy
    header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

    return true;
}

Чтобы обойти это, вы можете попробовать * это:

  1. поместите ваши данные в пространство имен в $ _SESSION

  2. передать массив опций после значения 'site', например. пространство имен вашей сессии.

->

$options['name'] = 'qidSpace';

$mainframe =& JFactory::getApplication('site', $options);

НТН.

* Я не уверен на 100% в механике, но это должно быть близко.

0 голосов
/ 20 октября 2014

Чтобы избежать конфликтов, вы также можете пропустить часть мэйнфрейма, если она по крайней мере не нужна.

Например:

<?php
   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');
   //$mainframe->initialise();

 jimport('joomla.user.helper'); 
 JUserHelper::verifyPassword($pass1,$pass2);
?>   

Мне потребовалось некоторое время, чтобы понять это, и это работает!

0 голосов
/ 25 сентября 2012

В конце я использовал сеанс Joomla для хранения информации.

//Store values in Joomla Session
$session = JFactory::getSession();
$session->set('variable', $variable);


//Get values from Joomla session later
$variable = $session->get('variable');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...