ASP.Net MVC - 停止自动完成密码

时间:2016-01-25 15:27:31

标签: asp.net asp.net-mvc

我有一个现有的asp.net mvc web应用程序,我想阻止浏览器下次自动记住密码。我可以这样做而无需更改输入autocomplete =" off"关于密码,虽然我可以看到这应该解决未来的任何已经完成此操作的人可能仍然可以登录密码被缓存。

1 个答案:

答案 0 :(得分:2)

确实autocomplete="off"会做到这一点。你会看到它也在SO中使用(右上角):

<input style="display: inline-block; width: 188px; max-width: 188px;" name="q" placeholder="search" value="" tabindex="1" autocomplete="off" maxlength="240" type="text">

您可以使用Razor将其添加到输入中:

@Html.TextBoxFor(model => model.Input, new { autocomplete="off" })

你也可以使用jQuery一次定位所有这些:

$(document).ready(function() {
    $("input:text, form").attr("autocomplete", "off");
})

对于缓存部分,请查看"How to Turn Off Form Autocompletion" (MDN)的摘录(整篇文档值得一读):

  

设置autocomplete="off"有两个效果:

     
      
  • 它会停止浏览器保存字段数据,以便稍后在类似表单上自动完成,尽管启发式操作因浏览器而异。
  •   
  • 它会停止浏览器缓存会话历史记录中的表单数据。表单数据缓存在会话历史记录中时,用户拥有的信息   用户提交表单后,将显示填写的内容   单击“后退”按钮返回原始表单页面。
  •   
     

在某些情况下,浏览器会继续建议自动完成值   即使autocomplete属性设置为off。这出乎意料   对于开发人员来说,这种行为可能会令人费解诀窍真的   强制no-completion是为属性分配一个随机字符串   像这样:

     

autocomplete="nope"

     

由于此随机值不是有效值,浏览器将放弃。

您还应该检查所有主流浏览器之间的这种行为是否一致(取决于您所使用的浏览器支持)。

更新:Michael Liu在评论中指出“现代浏览器会忽略密码字段中的自动填充属性”,在这种情况下,我不知道合法的解决方案。

您可以尝试在实际的input之上添加password字段并将其设置为隐藏,浏览器应尝试自动填充该字段:

<!-- before your actual password field -->
<input style="display: none;" type="password" name="pwdplaceholder"/>

...然而,它不是浏览器行为的混乱,这不是最佳实践。

另请参阅another SO question(由Michael Liu在评论中分享)。