【问题标题】:Joomla 2.5.9, PHP 5.3.22, JFactory, Get UserJoomla 2.5.9、PHP 5.3.22、JFactory、获取用户
【发布时间】:2013-03-12 20:05:08
【问题描述】:

我正在使用 Joomla Easy Flash Uploader,上传完成后,系统会自动向管理员(或我选择的人)发送一封电子邮件。它旨在在电子邮件中显示登录用户的姓名,但它只是继续显示“Guest”,即使该表单仅由登录用户访问。我迫切需要这个来正确提取用户名。消息内容如下:(文件名和位置已被删除以保护我的网站。

一位客人(客人)已于 2013 年 3 月 12 日星期二 14:56:07 -0500 成功将 FILE NAME 上传到 LOCATION。

  • 查看代码:

//邮件通知 if ($_POST['notify'] != false && JMailHelper::isEmailAddress($_POST['recipient'])) { //获取邮件对象 $mailer =& JFactory::getMailer();

    //set up the sender
    $config =& JFactory::getConfig();
    $sender = array( 
        $config->getValue( 'config.mailfrom' ),
        $config->getValue( 'config.fromname' )
    );
    $mailer->setSender($sender);

    //set up recipient
    $mailer->addRecipient($_POST['recipient']);

    //get user info
    $user_info = array();
    $user =& JFactory::getUser();
    if ($user->guest == true)
    {
        $user_info['name'] = 'A guest';
        $user_info['username'] = 'Guest';
    }
            else
    {
        $user_info['name'] = $user->name;
        $user_info['username'] = $user->username;
    }

    //set up message
    $body = $user_info['name']." (".$user_info['username'].") has successfully uploaded ".$fileName;
    $body.= "(".sizeToText($fileSize).") to ".JPATH_SITE.DS.$cleanedSubPath;
    $body.= " at ".date("r", time()).".\n";
    $mailer->setSubject('New File Uploaded - PC Scribe');
    $mailer->setBody($body);

    //send email
    $send =& $mailer->Send();
    if ($send !== true)
    {
        //error: DO NOTHING!!!
        /****DEBUGGING****/
        //$replaceText.= ' * Email error *';
        /****  CODE   ****/
    }
    else
    {
        //success: DO NOTHING!!!
        /****DEBUGGING****/
        //$replaceText.= ' (Email sent)';
        /****  CODE   ****/
    }
}

【问题讨论】:

  • 天哪!这个“$_POST”到底是什么鬼?
  • var_dump($user) 显示什么?另外,你不需要通过引用分配,它会从php 5.3+开始产生警告,所以改为$user = JFactory::getUser();。还有,什么叫邮寄功能,怎么叫?
  • 只是让您知道,您不应该使用& 符号,您应该使用Joomla 编码标准,而不是$_POST

标签: php flash joomla uploader


【解决方案1】:

我真的不认为代码有什么问题(嗯,除了使用 $_POST 的安全问题)。

至少代码本身可以做到这一点。

$user_info = array();
$user = JFactory::getUser();
if ($user->guest == true)
{
    $user_info['name'] = 'A guest';
    $user_info['username'] = 'Guest';
}
        else
{
    $user_info['name'] = $user->name;
    $user_info['username'] = $user->username;
}

var_dump($user_info);

唯一的解释可能是该扩展在 Joomla 之外以某种方式工作!并且用户会话以某种方式丢失。

自己做一些测试,用 $user 的 var_dump($user) 检查内容。

【讨论】:

  • 从技术上讲,在他的代码中使用$_POST 没有安全问题。我并不是说在其他地方不会有问题,也不是说它是正确的使用方式(JInput 当然更可取),只是在这段特定的代码中没有安全问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多