2

我在使用 Joomla 时遇到会话/cookie 问题!版本:Joomla!1.5.9 生产/稳定 [Vatani] 2009 年 1 月 9 日 23:00 GMT。

我正在尝试将数据保存到会话中并在下一页上访问它,我尝试过:

1) 使用 joomlas 会话 ($session->set('var', 'data')) - 这是我的首选方法

2) 使用普通的 PHP 会话 ($_SESSION['Var'] = 'data') - 这工作正常,直到我初始化 joomla 大型机

3) 使用 PHP Cookies (setcookie('var', 'data', time()+3600,'/');) - 这在我初始化 joomla 之前仍然有效。

这是我尝试使用的代码:

第 1 页:

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(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();

$session = JFactory::getSession();

$thedata = array();
$i = 0;
if($resultscount > 0) // $resultscount = mysql_num_rows($sql) == 1097 in my script
{
      while($row = mysql_fetch_assoc($result))
                $thedata[$i]['id'] = $row['user_id'];
                ...LOTS more additions to $thedata, 1000+ rows containing 28 variables each.
$i++;
}
$session->set('thedata',$thedata);

第2页:

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(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();

$session = JFactory::getSession();
print_r($session->get('thedata'));

会话始终为空。我注意到如果会话只包含少量数据(1 或 2 行)它可以工作,但是当我尝试将大量结果保存到会话中时它会中断并且下一页上的会话是空的。

cookie 也会发生同样的情况,结果很少 = 工作正常,结果很多 = cookie 为空。

我究竟做错了什么?

4

1 回答 1

0

最有可能的是,将超过 30000 个变量存储在会话中的二维数组中,您会得到一个溢出来破坏您的数据,因此它们会丢失。通过在会话存储(空间有限)中复制数据库,您一无所获。

重新查询数据更合适。此外,使用 Joomla!API而不是直接使用mysql函数。

$db = JFactory::getDBO();
$db->setQuery("SELECT ...");
$thedata = $db->loadObjectList('id');

就是你所需要的(双索引$i没有任何目的)。

于 2013-06-01T21:11:39.100 回答