Joomla 3 无效令牌错误


Joomla 3 Invalid Token error

每次我登录joomla管理员时,我都会收到以下错误:

最近的请求被拒绝,因为它包含无效的 安全令牌。请刷新页面,然后重试。

我进入

管理部分的唯一方法是返回一两个页面,然后我就进入了。是什么导致了这种非常烦人的行为?

我正在使用K2运行Joomla 3.1.5。

似乎这个问题得到了很多观点,所以这是我提出的处理令牌错误的解决方案。由于看到错误可能对用户没有任何意义,因此我想注销用户并将令牌错误重定向到主页。我能做到这一点的唯一方法是使用插件。

归功于原始令牌拦截器插件的 joomunited.com,可在此处找到。

这是我修改后的版本,其中包括用户注销和重定向到带有消息的主页。希望这有帮助!

令牌拦截器.php:

class PlgSystemTokeninterceptor extends JPlugin
{
    public function __construct(&$subject, $config = array())
    {
        parent::__construct($subject, $config);
        $app = JFactory::getApplication();
        if (($app->isSite() && $this->params->get('use_frontend')) || ($app->isAdmin() && $this->params->get('use_backend'))) 
        {
            register_shutdown_function(array($this,'redirectToHome'));
        }
    }
    public function redirectToHome()
    {
        $content = ob_get_contents();
        if($content == JText::_('JINVALID_TOKEN') || $content == 'Invalid Token')
        {
            $app = JFactory::getApplication();
            if (!JFactory::getUser()->guest)
            {
                $app->logout();
            }
            $app->redirect(JURI::base().'index.php?invalid_token=true');
            return false;   
        }
    }
    function onAfterInitialise()
    {
        $app = JFactory::getApplication();
        $invalid_token = $app->input->get('invalid_token', 'false');
        if ($invalid_token == 'true')
        {
            $app->enqueueMessage(JText::_('JINVALID_TOKEN'), 'warning');
        }
        return true;
    }
}

就好像您单击了两次并再次提交登录信息:

  • 首次登录成功
  • 第二个将失败(令牌无效)

但是您已经通过第一个登录,因此您可以使用管理员。

有些插件可能会导致这种情况;由于您已登录,我想您可以排除缓存。

我们的一位托管客户在他的Joomla 3.3.X上遇到了这个问题。

登录到管理员加载了很长时间,然后显示"无效的安全性"消息。

我在浏览器上按了"返回",然后能够登录。

我清除了所有缓存,升级到最新版本,更改了密码,问题消失了。

不要忘记始终使用"注销"选项,而不仅仅是关闭浏览器,当您想退出Joomla管理员时。

如果客户端很快再次返回相同的错误,我将进行更新。

只需按浏览器中的后退按钮,然后按刷新

只需禁用令牌拦截器插件即可。它会起作用。

我刚刚删除了对索引的调用.php在网址的末尾

即。

http://www.wwf.org/english_site/administrator/index.php

现在。。。删除索引.php

网址应如下所示

http://www.wwf.org/english_site/administrator/

。这应该可以解决它,如果它不适合您,请抱歉,因为它对我有用。

只需按浏览器中的后退按钮,然后按刷新! 为我工作!