TYPO3:禁用特定插件/扩展的缓存

TYPO3: disable cache for specific plugin / extension

我构建了一个扩展和一个插件,前端用户可以在其中编辑他们的个人资料,但我注意到一个严重问题:

在 "Edit profile" 下,用户可以看到关于另一个甚至没有登录的用户的完整信息。显然该表单是缓存在服务器上的,因为添加后:

config.no_cache = 1

它没有再次发生。现在的问题是整个网站的索引都被禁用了。

有没有办法只为这个特定的扩展/插件禁用缓存?

你的 ext_localconf.php 中应该有这样的东西:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        $_EXTKEY,
        'List',
        array('User' => 'list,editProfil'),
        array('User' => 'editProfil') // Uncached actions
);

这里是解释的地方:https://docs.typo3.org/typo3cms/ExtbaseFluidBook/4-FirstExtension/7-configuring-the-plugin.html

如果您希望它仅适用于特定页面或由集成商控制,您可以覆盖对象的 TS 渲染指令:

tt_content.list.20.YOURLISTTYPEHERE = USER_INT

或者,如果您将其注册为自定义 CType:

tt_content.YOURCTYPEHERE.20 = USER_INT

以上应该适用于 fluid_styled_content 和 css_styled_content。

几乎不建议使用 config.no_cache = 1 因为这会禁用很多东西,而不仅仅是缓存,正如您发现的那样。它还会禁用整个页面的所有缓存,并且只使特定插件不可缓存几乎总是更好的性能 - 如果可能的话,只在插件用于呈现不应缓存的视图的页面上这样做。

如果您最终确实需要缓存视图的某些部分,请小心。就安全性而言,这不是灵丹妙药,但始终在任何缓存标识符中包含用户 ID(以及可能还有来自身份验证的其他内容)是一个好的开始。并且尽量不要在任何时候将敏感信息存储在缓存中,包括输出用户名等内容的代码。