JFactory getUser随机不在包装器中工作

时间:2014-01-24 08:38:20

标签: php joomla

我正在使用旧的1.5.26 Joomla安装。我为网站开发了一个Web应用程序,用joomla包装器嵌入它,并决定使用joomla用户管理进行访问(在这里插入一个头撞到墙上的声音)。

我使用了一个简单的代码:

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

$usuario= JFactory::getUser();
$idUsuario=$usuario->id;
$nombreUsuario=$usuario->name;

if ($idUsuario==0)
{
     echo "<p>Error: no tiene permiso</p>";
     die ();
}
else
{
    echo "<p>Hola, $nombreUsuario.</p>";
}
/* And the script goes on... */

事情是,一切都很完美。我在几台带有几个网络浏览器的计算机上测试过它(即使是iPad),它似乎工作正常。我很高兴......直到我开始制作并允许真实用户访问它。

全面而彻底的灾难。许多用户(很多用户)都收到“错误”消息,jFactory :: getUser为他们返回0。我使用他们的用户名和密码来尝试它,它工作正常。他们尝试从他们的结束而不是。

只有当我将脚本嵌入到包装器中时才会发生这种情况。如果我让用户通过指向应用程序目录的直接链接访问Web应用程序,问题就会消失。

有没有人对这可能发生的原因有任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您的问题与此问题How to pass Joomla parameters to an iframe (wrapper) page?中的问题相同,答案建议将其包含在您的脚本中:

<?php
define('_JEXEC', 1 );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] ); 
define( 'DS','/' );

require_once ( JPATH_BASE.DS. 'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
require(JPATH_BASE.DS.'libraries/joomla/factory.php');

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

以及此代码(与您的代码几乎相同):Getting user information within wrapper

答案 1 :(得分:0)

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../' ));  
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );

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


    $user = & JFactory::getUser();

这对我来说无处不在。请注意/../ 如果您在iframe中放入的文件具有更深层次,则可以添加更多/../&#39; s