防止浏览器在 .NET Core 2.2 中缓存表单值

Posted

技术标签:

【中文标题】防止浏览器在 .NET Core 2.2 中缓存表单值【英文标题】:Prevent browser caching form values in .NET Core 2.2 【发布时间】:2019-09-29 23:12:05 【问题描述】:

ASP.net Core 2.2 MVC Web 应用程序

我有许多表单,我不希望浏览器在用户返回页面时缓存/​​显示任何以前输入的数据。我希望元素/表单不缓存任何信息。我不只是希望浏览器不显示以前输入的信息,出于安全原因,我希望它不被缓存。

我尝试用以下方式装饰控制器方法:

[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]

无济于事,当我再次导航到页面/表单并开始输入时,之前输入的值继续显示为自动完成选项。

我也尝试过处理其中的每一个细微差别: Response Caching Middleware in ASP.NET Core

现在所有浏览器是如何做到这一点的?

【问题讨论】:

【参考方案1】:

好像是浏览器的autocompletion功能造成的:

默认情况下,浏览器会记住用户通过网站上的字段提交的信息。这使浏览器能够提供自动补全(即为用户已开始输入的字段建议可能的补全)或自动填充(即在加载时预填充某些字段)。

要为表单禁用此功能:

<form autocomplete="off">
    ... 
</form>

或者禁用一个字段:

<input ... autocomplete="off">

这里是off的详细解释

“off”关键字表示控件的输入数据特别敏感(例如核武器的激活码);或者它是一个永远不会被重复使用的值(例如银行登录的一次性密钥),因此用户每次都必须明确输入数据,而不是能够依赖用户代理来为他预填值;或者文档提供了自己的自动完成机制,并且不希望用户代理提供自动完成值。

更多详情请见how to disable autocompletion on MDN和w3c.org

希望对你有帮助。

【讨论】:

抱歉,您能重新阅读我的问题吗?我的第一句话专门询问如何使浏览器不缓存信息(如果可能的话)。我不想缓存任何东西,而不仅仅是不“显示”缓存的任何东西。这在以前是可能的。由于我的网站有用户为外部服务输入他们的 API 密钥,我不希望他们缓存在他们的浏览器中。谢谢。 @BeauD'Amore 这不是缓存的问题,而是现代浏览器实现的功能。根据w3c standard,When an element’s autofill field name is "off", the user agent should not remember the control’s data, and should not offer past values to the user。显然,任何遵守标准的浏览器都不会记住记录 谢谢,我现在明白了。标记为答案。如果可以将其设置在中间件中而不是像这样修改标记,那将是理想的,但我猜 MS 不会不存储您的数据;)【参考方案2】:

您可以将 autocomplete="off" 用于 html 元素,但 chrome 会阻止某些名称,如“名称”、“地址”等。

这个话题前面已经讨论过了。 Chrome ignores autocomplete="off"

【讨论】:

抱歉,您能重新阅读我的问题吗?我的第一句话专门询问如何使浏览器不缓存信息(如果可能的话)。我不想缓存任何东西,而不仅仅是不“显示”缓存的任何东西。这在以前是可能的。由于我的网站有用户为外部服务输入他们的 API 密钥,我不希望他们缓存在他们的浏览器中。谢谢。

以上是关于防止浏览器在 .NET Core 2.2 中缓存表单值的主要内容,如果未能解决你的问题,请参考以下文章

如何强制更新/防止在 Linux 上运行并由 nginx 反向代理服务器托管的 .NET Core Web 应用程序的 HTML 缓存

在ASP.NET Core应用中使用IMemoryCache缓存

在ASP.NET Core应用中使用IMemoryCache缓存

在ASP.NET Core应用中使用IMemoryCache缓存

在ASP.NET Core应用中使用IMemoryCache缓存

在ASP.NET Core应用中使用IMemoryCache缓存