我正在将 Joomla 用于一个项目,并且发生了一些 Ajax 请求来填充数据。我在 PHP 视图中生成一个 Joomla 会话令牌,并将其附加到 Ajax 请求端点的 URL 上,该端点也是一个 PHP 页面,并在返回数据之前验证该令牌。
像这样的东西:
// view.html.php
$script = "var ajaxurl = 'index.php?task=ajaxFunction&".JFactory::getSession()->getFormToken()."=1';";
$document->addScriptDeclaration($script);
// ajax.js
var request = new Request.JSON({
url: ajaxurl,
onException: function(headerName, value) {
// etc.
}
});
// controller
public function ajaxfunction()
{
JRequest::checkToken('get') or die( 'Invalid Token!' );
// do other stuff
}
这工作得很好,直到启用缓存。
问题在于view.html.php
,当 Joomla 使用其内部缓存时,该文件已使用已设置的令牌进行缓存——因此,每当浏览器请求该页面时,它都会将缓存的令牌连同它一起拉出,这意味着控制器将返回一个无效的令牌错误。
我知道在早期的 Joomla 构建缓存完全不起作用。除了禁用 Joomla 缓存之外,有没有办法在 Joomla 2.5+ 中完成这项工作?我找不到从缓存中排除单个视图的任何方法。