【问题标题】:Wrong TYPO3 Page Cache错误的 TYPO3 页面缓存
【发布时间】:2017-09-25 14:12:38
【问题描述】:

此问题偶尔会在访问者众多的页面上发生。 有时 TYPO3 会显示完全不同页面的内容(包括 HTML 头部部分)。

例如,如果用户调用以下页面:/products/(默认控制器 ProductControllerlistAction)TYPO3 在页面上显示随机控制器的内容和相同插件的操作(如 ApplicationControllershowAction)。 该网站没有重定向到另一个页面,它只是显示了错误的内容!

我已经尝试了以下方法:

  • 我在nonCacheableControllerActions 中添加了Controller + 操作(问题在一天后再次出现)
  • 在URL中添加?no_cache=1(问题解决了,但是页面速度降低了)
  • 清缓存(问题解决了,不管清什么缓存。但是一天后问题又出现了)
  • 我编写了一个脚本,每隔几分钟调用一次该页面,这似乎可以解决问题。

其他人有同样的问题吗?

规格:

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

【问题讨论】:

    标签: php caching typo3 realurl


    【解决方案1】:

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

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


    以下信息可能已过时,更多最新信息请参见下方 moe2k 的回答。

    或者,有一个系统参数“[FE][cHashRequiredParameters]” - 你可以在那里添加你的插件参数。如果没有给出 cHash 但设置了参数之一,则 TYPO3 触发配置的 cHash 错误行为。 我相信 cHashes 会自动为拼写链接设置,你可以试试看。如果它们没有自动设置,您应该在指向显示操作的链接上设置“useCacheHash = 1”。

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

    【讨论】:

    • 我的[pageNotFoundOnCHashError] 值已设置为1。但是 TYPO3 不会触发错误。我明天试试$GLOBALS['TSFE']→reqCHash(); 电话。但我想知道缓存问题是如何发生的。我怎样才能防止将来出现这个问题?
    • 是的,但是即使您的 pageNotFoundOnCHashError 已设置,也不会触发任何错误,因为您的扩展程序没有明确要求 cHash。缓存问题通常发生在缓存被清除后在没有 cHash 的情况下调用操作 - 然后非散列页面进入您的缓存并将被传递给所有未来的调用 - 没有 cHash。我们经历过很多次。我们现在设置 $GLOBALS['TSFE']→reqCHash();在我们想要单个缓存条目的所有操作中。从那以后就没有问题了。
    • TYPO3 6.x+ 默认设置 cHash,你必须设置 NoCacheHash 以避免生成 cHash 值。这就是为什么我建议使用 USER_INT 来验证它不是记录更新中的错误,从而使 cHash 值无效。它不漂亮,它不是首选方式,但它会帮助您找到真正的问题。并在您执行此操作时让您的页面正常工作。
    • @Nano 你有想过吗?我有一个非常相似的问题
    • @Noch_ein_Kamel 使用$GLOBALS['TSFE']->reqCHash()后问题解决了
    【解决方案2】:

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

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

    最佳实践是 showAction 的第二页,并且仅在 single_view 页面上,将插件定义为 USER_INT。

    但是如果你有两个页面,你不应该遇到这个问题。并且不需要 USER_INT 设置。

    【讨论】:

    • 我个人认为这不是一个好主意 - USER_INT 也使插件无缓存。只是为了说清楚。 “如果您将此对象创建为 USER_INT,它将在主页面渲染之外呈现为非缓存。” docs.typo3.org/typo3cms/TyposcriptReference/ContentObjects/…
    • 完全正确,并且您希望它在主页呈现之外呈现,以避免列表和显示操作之间的缓存冲突。
    • 在某些情况下,这意味着您的大部分网站都无法缓存,从而减慢所有速度。这不一定是有道理的。 Typo3 使用 cHashes 为不同的操作提供缓存。在某些情况下,只关闭缓存是有意义的,但在某些情况下,使用正确的 cHashes 是更好的解决方案。不过我可能只是误解了这个问题。
    【解决方案3】:

    从 TYPO3 v9 开始,使用以下内容:

    $TYPO3_CONF_VARS['FE']['cacheHash']['requireCacheHashPresenceParameters']
    

    使用数组作为值而不是

    $TYPO3_CONF_VARS['FE']['cacheHash']['cHashRequiredParameters']
    

    使用逗号分隔的列表。

    【讨论】:

      猜你喜欢
      • 2014-02-10
      • 2015-06-14
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2013-09-19
      相关资源
      最近更新 更多