【发布时间】:2013-06-05 18:31:59
【问题描述】:
我正在将 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 使用其内部缓存时,会使用已设置的令牌进行缓存——因此,每当浏览器请求页面时,它都会将缓存的令牌连同它一起拉出,这意味着控制器将返回一个无效的 Token 错误。
我知道在早期的 Joomla 构建中,缓存完全不起作用。有没有办法在 Joomla 2.5+ 中完成这项工作,而不仅仅是禁用 Joomla 缓存?我找不到从缓存中排除单个视图的任何方法。
【问题讨论】:
标签: php session caching joomla