2017-09-25 67 views
0

在大量访问者的页面上偶尔会出现此问题。 有时TYPO3会显示完全不同页面的内容(包括HTML头部分)。错误的TYPO3页面缓存

例如,如果用户调用以下网页:/products/(默认控制器ProductControllerlistAction)TYPO3显示页面(像ApplicationControllershowAction)上的随机控制器和相同的插件的动作的内容。 本网站不会重定向到其他网页,它只是显示错误的内容!

我已经尝试了以下几件事:

  • 我添加了控制器+动作的nonCacheableControllerActions(问题在一天后再次出现)
  • 添加?no_cache=1到URL(问题是解决了,但是页面速度降低)
  • 清除缓存(问题解决了,不管是什么缓存被清除。但问题发生在一天后再次)
  • 我写了一个脚本,调用页面,这似乎解决这个问题,每隔几分钟。

其他人是否也有同样的问题?

规格:

  • TYPO3版本:7.6.22
  • realurl版本:2.2.1

回答

1

这些缓存问题通常是由于错误或缺少cHash。

您可以在控制器的操作中使用$GLOBALS['TSFE']→reqCHash(); 。如果没有设置cHash,则禁用缓存,因此请确保不会获取不正确的缓存条目。 请注意:如果您在系统设置中设置了[pageNotFoundOnCHashError] = 1,那么当页面被调用时没有发现cHash时,将会发现页面未找到错误,如果设置为0,页面仍然会显示但不会被缓存。

另外,还有一个系统参数“[FE] [cHashRequiredParameters]” - 你可以在那里添加你的插件参数。如果没有给出cHash但设置了其中一个参数,则TYPO3会触发配置的cHash错误行为。 我相信cHashes会自动设置为typolinks,你可以试试看。如果它们没有自动设置,你应该在show action的链接上设置“useCacheHash = 1”。

我更喜欢&使用第一个变体。

+0

我的'[pageNotFoundOnCHashError]'值已经设置为'1'。但是TYPO3不会触发错误。我会明天尝试'$ GLOBALS ['TSFE']→reqCHash();'。但我不知道如何缓存问题可能发生。我怎么能在将来防止这个问题呢? – Nano

+0

是的,但即使你的pageNotFoundOnCHashError,将不会有错误可能是触发,因为您的扩展没有明确要求cHashes。 缓存问题通常发生在缓存被清除之后调用没有cHash的操作时 - 然后非哈希页面进入缓存并且将在未来所有调用中被传递 - 没有cHash的情况下不会发送。我们有过很多次。我们现在设置$ GLOBALS ['TSFE']→reqCHash();在我们希望单独缓存条目的所有操作中。自那以后没有问题。 – deadfishli

+0

好的,我会尝试一下,让它知道它是否有效。 – Nano

0

尝试定义插件作为USER_INT。 plugin.tx_yourextkey = USER_INT

这将告诉TYPO3呈现每个请求的代码。

最佳做法是showAction的第二页,并且只在single_view页面上将插件定义为USER_INT。

但是你有两页这个你不应该遇到这个问题。而不需要USER_INT设置。

+1

我个人认为这不是一个好主意 - USER_INT也使插件无缓存。只是为了说清楚。 “如果您将此对象创建为USER_INT,则它将在主页面呈现之外呈现为非缓存。” https://docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/UserAndUserInt/Index.html – deadfishli

+0

,并且您希望它在主页面呈现之外呈现,以避免缓存列表和显示操作之间的冲突。 –

+0

在某些情况下,这意味着您的网站大部分无法缓存,因此放缓了一切。这并不一定有意义。 Typo3使用cHashes来缓存不同的动作。在某些情况下,只需打开缓存是有意义的,但在某些情况下,使用正确的cHashes是更好的解决方案。我可能只是误解了这个问题。 – deadfishli